为什么在交互模式和从脚本运行时,“a is b”表现不同?

7
在尝试回答关于is关键字的使用问题时,我发现以下代码:

脚本:

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

交互模式:

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

在Python交互模式和脚本运行时,输出结果不同。
根据这个答案
当前实现保留了一个整数对象数组,用于存储-5到256之间的所有整数。当你创建该范围内的整数时,实际上只会返回对现有对象的引用。
因此,我期望a is b只对[-5, 256]范围内的整数返回True。但是在交互模式下为真,在脚本运行时则不为真。
问题:为什么在交互模式和脚本运行时a is b的行为不同?
注意:在Python 2.7和Python 3中进行了测试。

2
Python 3 上的结果相同。交互模式下为“False”,脚本模式下为“True”。 - vaultah
Python 3.3的行为类似于2.7。有趣的是,>>> a=b; >>> a is b返回True - Davidmh
1个回答

2
区别在于常量的处理方式。在交互模式下,无法确定数字常量是否已存在。但对于编译后的代码,每个常量都会被内部保存到表中,并且重复的常量会被删除。但这是一种实现细节,并不一定适用于每个Python版本。

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