在尝试回答有关使用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中测试
答案 0 :(得分:1)
区别在于如何处理常量。在交互模式下,如果已经存在数字常量,则无法说明。但是对于已编译的代码,每个常量都会在内部保存到表中,并删除重复项。但这是一个实现细节,并不一定适用于每个python版本。