为什么" a是b"在交互模式下以及何时从脚本运行时表现不同?

时间:2014-06-08 12:55:33

标签: python python-2.7 integer python-interactive

在尝试回答有关使用is关键字的问题时,我发现此代码:

脚本:

a = 123456
b = 123456
print a is b # True

互动模式:

>>> a = 123456
>>> b = 123456
>>> a is b
False

在Python交互模式下以及从脚本运行时提供了不同的输出。

来自this answer

  

当前实现为-5到256之间的所有整数保留一个整数对象数组,当您在该范围内创建一个int时,实际上只返回对现有对象的引用。

因此,我希望a is b仅对True范围内的整数返回[-5, 256]。但它只适用于交互模式,而不是从脚本运行时。

问题:为什么a is b在交互模式下以及何时从脚本运行时表现不同?


注意:在Python 2.7和Python 3中测试

1 个答案:

答案 0 :(得分:1)

区别在于如何处理常量。在交互模式下,如果已经存在数字常量,则无法说明。但是对于已编译的代码,每个常量都会在内部保存到表中,并删除重复项。但这是一个实现细节,并不一定适用于每个python版本。