Python “为什么?”;a是b;在交互模式下以及在';是从剧本里跑出来的吗?
在回答有关使用Python “为什么?”;a是b;在交互模式下以及在';是从剧本里跑出来的吗?,python,python-2.7,integer,python-interactive,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 交互模式: a = 123456 b = 123456 print a is b # True >>> a = 123456 >>> b = 123456 >&
is
关键字的问题时,我发现以下代码:
脚本:
a = 123456
b = 123456
print a is b # True
>>> a = 123456
>>> b = 123456
>>> a is b
False
交互模式:
a = 123456
b = 123456
print a is b # True
>>> a = 123456
>>> b = 123456
>>> a is b
False
在Python交互模式和从脚本运行时提供不同的输出
发件人:
当前的实现为-5到256之间的所有整数保留一个整数对象数组,当您在该范围内创建一个int时,实际上只返回对现有对象的引用
因此,我希望a是b
返回的True
仅适用于[-5256]
范围内的整数。但这仅在交互模式下是正确的,而不是从脚本运行时
问题:为什么a是b
在交互模式和从脚本运行时的行为不同
注意:在Python2.7和Python3中测试区别在于,常量是如何处理的。在交互模式下,无法判断数字常量是否已经存在。但对于编译后的代码,每个常量都会在内部保存到一个表中,并删除重复项。但这是一个实现细节,不一定对每个python版本都适用。在python 3上的结果是相同的
False
对于交互式,而True
对于脚本。Python 3.3的行为与2.7相同。有趣的是,>>a=b;>>>a是b
返回True
。