Python:is 和 == 的区别

总的来说,官方文档中说 is 表示的是对象标示符(object identity),而 == 表示的是相等(equality)。is 的作用是用来检查对象的标示符是否一致,也就是比较两个对象在内存中的地址是否一样,而 == 是用来检查两个对象是否相等。

  • 检查 a is b 的时候,其实相当于检查 id(a) == id(b)。
  • 检查 a == b 的时候,实际是调用了对象 a 的 __eq()__ 方法,a == b 相当于 a.__eq__(b)。
i1 = 205464113
i2 = 205464113
i3 = i1
print(id(i1))
print(id(i2))
print(id(i3))
print(i1 is i2)
print(i1 == i2)
print(i1 is i3)
print(i1 == i3)
print('**********')

f1 = 1.574
f2 = 1.574
f3 = f1
print(id(f1))
print(id(f2))
print(id(f3))
print(f1 is f2)
print(f1 == f2)
print(f1 is f3)
print(f1 == f3)
print('**********')

str1 = 'james'
str2 = 'james'
str3 = str1
print(id(str1))
print(id(str2))
print(id(str3))
print(str1 is str2)
print(str1 == str2)
print(str1 is str3)
print(str1 == str3)
print('**********')

t1 = (1, 2, 3)
t2 = (1, 2, 3)
t3 = t1
print(id(t1))
print(id(t2))
print(id(t3))
print(t1 is t2)
print(t1 == t2)
print(t1 is t3)
print(t1 == t3)
print('**********')

结果如下:
在这里插入图片描述
前面三个都很好理解,最后一个 id 由于 t1 和 t2 id 不同所以判断 is 的时候为 False,表示并不是指向同一对象,但是对象值是一样的,所以判断 == 的时候为 True。
再来一个例子就:

a = 2.0
b = 2
print(id(a))
print(id(b))
print(a is b)
print(a == b)

结果如下:
在这里插入图片描述
解释:显然 a 是一个浮点数类型,b 是一个整型,所以肯定不是指向同一对象,对应的对象标识符也不同,所以判断 is 为 False。但是由于数学上 2.0 = 2 所以判断 == 为 True。

可以认为:is 为 True,== 必为 True。因为指向同一对象,当然值是一样的。但是 == 为 True,is 不一定为 True,上例即为反例。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值