Python 中 == 和 is 的区别

== 用来判断两个对象是否相等

is 用来判断两个引用是否指向同一个对象

>>> a = [1, 2, 3]
>>> b = [1, 2, 3]
>>> a == b
True
>>> a is b
False

注意:

>>> a = 300
>>> b = 300
>>> a == b
True
>>> a is b
False

>>> id(a)
2525676797776
>>> id(b)
2525679431184

>>> a = 100
>>> b = 100
>>> a == b
True
>>>a is b
True

# 为什么???
>>> id(a)
1846770240
>>> id(b)
1846770240

从结果可以看到当a、b为100时,a is b 也为 True

出现这样的结果是因为 Python 的垃圾回收机制中小数对象池的存在,Python中为了优化速度,会把 [-5, 256] 之间的数据提前存在小整数对象池中,程序只要用到 [-5, 256] 之间的数据不再重新创建一份,都是直接指向对象池中同一份数据,这个区间以外的数据,每次使用都会重新分配一块内存来存储数据。

# Python 

作者:ITmob
来源:ITmob.cn
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×