ITmob-Ly
发布于 2023-05-08 / 124 阅读
0

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] 之间的数据不再重新创建一份,都是直接指向对象池中同一份数据,这个区间以外的数据,每次使用都会重新分配一块内存来存储数据。