Python is 和 == 的区别

原文: Python3 运算符

   cash

is 和 ==

is 判断两个变量是否是引用同一个内存地址。

== 判断两个变量是否相等。

如果不用 a = b 赋值,int 型时,在数值为 -5~256(64位系统)时,两个变量引用的是同一个内存地址,其他的数值就不是同一个内存地址了。

也就是,a b 在 -5~256(64位系统)时:

a = 100
b = 100
a is b # 返回 True

其他类型如列表、元祖、字典让 a、b 分别赋值一样的时:

a is b  # 返回False
更多解析

  风的尽头

== 和 is 的区别

is 判断两个对象是否为同一对象, 是通过 id 来判断的; 当两个基本类型数据(或元组)内容相同时, id 会相同, 但并不代表 a 会随 b 的改变而改变。

== 判断两个对象的内容是否相同, 是通过调用 __eq__() 来判断的。

1、当列表,元组,字典中的值都引用 a,b 时,总是返回 True,不受 a,b 值大小的影响

a=1000
b=1000
list1=[a,3,5]
list2=[b,4,5]
print(list1[0] is list2[0])
tuple1=(a,3,5)
tuple2=(b,4,5)
print(tuple1[0] is tuple2[0])
dict1={6:a,2:3,3:5}
dict2={1:b,2:4,3:7}
print(dict1[6] is dict2[1])

输出结果为:

True
True
True

2、当不引用a,b,直接用具体值来测试时,列表,字典,不受值大小影响,返回True,元组则受 256 值范围的影响,超出范围则地址改变,返回 False。

list1=[1000,3,5]
list2=[1000,4,5]
print(list1[0] is list2[0])
tuple1=(1000,3,5)
tuple2=(1000,4,5)
print(tuple1[0] is tuple2[0])
dict1={6:1000,2:3,3:5}
dict2={1:1000,2:4,3:7}
print(dict1[6] is dict2[1])

输出结果为:

True
False
True

3、当直接用列表、元组、字典本身来测试时,刚好相反,元组返回 True,列表,字典返回 False。

list1=[1000,3,5]
list2=[1000,3,5]
print(list1 is list2)
tuple1=(1000,3,5)
tuple2=(1000,3,5)
print(tuple1 is tuple2)
dict1={1:1000,2:3,3:5}
dict2={1:1000,2:3,3:5}
print(dict1 is dict2)

输出结果为:

False
True
False
取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

点我查看本站打赏源码!

忘记密码?

如何获取邀请码?

关闭