使用预分配-5,255范围之上的整数在python中如何工作和id

时间:2016-07-28 13:39:41

标签: python

运行解释器

>>> x = 5000
>>> y = 5000
>>> print(x is y)
>>> False

使用python test.py在代码中运行相同内容会返回True

哎呀?

2 个答案:

答案 0 :(得分:1)

当两个操作数引用完全相同的对象时,is运算符仅返回True。解释器是选择创建新值还是重用现有值是实现细节。 CPython(最常用的实现)显然很高兴有几个不同的整数对象将比较相等但不相同。

同样,就内存分配和值创建而言,无法保证解释器的行为是相同的。在交互式运行时,在连续语句的执行之间发生了很多事情。非交互式运行没有那些东西(将表达式的值绑定到_变量,打印出值后跟提示等)需要发生,因此对于解释器来说更容易重新使用刚创造的价值。

答案 1 :(得分:1)

Python在开始时分配了一些数字。

for x,y in zip(range(256,258),range(256,258)):
    print(x is y)

x=y=5000
print(x is y)

这将在我的机器上打印:

True
False
True

第一个打印是True,因为它在分配的范围内,x和y都指的是相同的数字。 False表示x和y都将创建一个整数对象,它们将不相同。最后一个是True,因为我特意告诉Python使x和y成为同一个对象。 如果要检查相等性,请使用==代替is