<分区>
Possible Duplicate:
Python “is” operator behaves unexpectedly with integers
我正在学习 Python,并且很好奇为什么:
x = 500
x is 500
返回 False,但是:
y = 100
y is 100
返回真值?
标签 python
<分区>
Possible Duplicate:
Python “is” operator behaves unexpectedly with integers
我正在学习 Python,并且很好奇为什么:
x = 500
x is 500
返回 False,但是:
y = 100
y is 100
返回真值?
最佳答案
Python 重用小整数。也就是说,所有 1
(例如)都是相同的 1
对象。如果我没记错的话,范围是 -5 到 255,尽管这是不应依赖的 CPython 实现细节。例如,我很确定 Jython 和 IronPython 会以不同方式处理此问题。
之所以可以正常工作,是因为 int
是不可变的。也就是说,您不能将 4
就地更改为 5
。如果 a
的值为 4,a = 5
实际上是将 a
指向不同的对象,而不是改变值 a
包含。 Python 不共享任何可变类型(例如列表),在这些类型中意外地多次引用同一对象可能会导致问题。
你应该使用 ==
来比较大多数东西。 is
用于检查两个引用是否指向同一个对象;它大致等同于 id(x) == id(y)
。
关于Python 值实际上并不相等,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12557514/