"is"运算符在处理整数时表现出意外的行为

617

为什么以下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后,发现Python 2.3.3在99和100之间表现出了上述行为。

基于以上情况,我可以假设Python内部是这样实现的: "小"整数与较大的整数存储方式不同,is运算符可以区分它们。为什么会出现这种问题?有没有更好的方法来比较两个任意对象是否相同,而我事先不知道它们是否为数字?

11个回答

5

Python 3.8 新特性:Python行为变更:

编译器现在会在使用某些类型的字面值(例如字符串、整数)时与身份检查(isis not)一起使用时产生语法警告。这些在CPython中通常是偶然可以工作的,但不被语言规范保证。警告建议用户改用等号检查(==!=)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接