为什么以下代码在 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 时,您实际上只是返回对现有对象的引用。

来自: stackoverflow.com