为什么以下代码在 Python 中表现异常?
>>> a = 256
>>> b = 256
>>> a is b
True # This is an expected result
>>> a = 257
>>> b = 257
>>> a is b
False # What happened here? Why is this False?
>>> 257 is 257
True # Yet the literal numbers compare properly
我正在使用Python 2.5.2。
基于上述内容,我可以假设Python在内部实现为"小"整数以与大整数不同的方式存储,并且is
操作员可以区分。
答案
看看这个:
>>> a = 256
>>> b = 256
>>> id(a)
9987148
>>> id(b)
9987148
>>> a = 257
>>> b = 257
>>> id(a)
11662816
>>> id(b)
11662828
这是我在 Python 2 文档中找到的内容,“普通整数对象”(这对于蟒蛇3):
当前的实现为 -5 到 256 之间的所有整数保留一个整数对象数组,当您创建该范围内的 int 时,您实际上只是返回对现有对象的引用。