6

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

脚本:

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

交互模式:

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

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

这个答案

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

所以,我希望它只a is b返回Truerange 中的整数[-5, 256]。但这仅在交互模式下有效,而不是从脚本运行时。

问题:为什么a is b在交互模式和从脚本运行时的行为不同?


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

4

1 回答 1

1

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

于 2014-06-08T13:00:34.957 回答