Python-“ is”运算符对整数的行为异常

为什么以下代码在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运算符可以分辨出这种差异。为什么要泄漏抽象?当我事先不知道它们是否为数字时,比较两个任意对象以查看它们是否相同的更好方法是什么?

回答:

看看这个:

>>> a = 256

>>> b = 256

>>> id(a)

9987148

>>> id(b)

9987148

>>> a = 257

>>> b = 257

>>> id(a)

11662816

>>> id(b)

11662828

这是我在Python 2文档“ Plain Integer Objects”(对于Python 3中相同)中找到的:

当前的实现为-5到256之间的所有整数保留一个整数对象数组,当您在该范围内创建int时,实际上实际上是返回对现有对象的引用。因此应该可以更改1的值。我怀疑在这种情况下Python的行为是不确定的。

以上是 Python-“ is”运算符对整数的行为异常 的全部内容, 来源链接: utcz.com/qa/410431.html

回到顶部