在尝试回答有关关键字使用的问题时is,我发现此代码:
is
脚本:
a = 123456 b = 123456 print a is b # True
交互模式:
>>> a = 123456 >>> b = 123456 >>> a is b False
在 Python 交互模式下以及从脚本运行时给出了不同的输出。
从这个答案:
当前实现为 -5 到 256 之间的所有整数保留一个整数对象数组,当您在该范围内创建一个整数时,实际上只是返回对现有对象的引用。
因此,我期望仅对范围内的整数a is b返回。但这仅在交互模式下才成立,而不是从脚本运行时成立。True``[-5, 256]
a is b
True``[-5, 256]
问题:为什么a is b在交互模式下的行为与从脚本运行时的行为不同?
注意:在 Python 2.7 和 Python 3 中测试
您观察到的有关关键字和整数缓存的行为is是由于 Python 如何管理内存和对象创建,特别是在交互模式与运行脚本时。
Python 会缓存小整数(通常在 -5 到 256 的范围内)。这意味着当您在此范围内创建一个整数时,出于性能原因,Python 会重复使用同一个对象。这就是为什么在交互模式和脚本中,像这样的表达式a is b都会返回True此范围内的整数。
True
a = 123456
b = 123456
a
b
False
总之,行为的差异a is b不仅仅与整数缓存有关;它还受到 Python 在交互式和脚本执行上下文中管理对象引用的方式的影响。这可能导致创建不同的对象实例,尤其是对于缓存范围之外的整数。因此,当您想要检查两个值是否相等时,最好使用它,==而不管它们的对象身份如何
==