为什么即使在重新分配的情况下,整数也会给出正面的身份测试?

时间:2015-11-30 10:33:33

标签: python python-3.4

首先,我知道这不是一个很好的问题,但我从Python开始尝试理解事物的机制。以下代码是Python 3.4解释器的输出:

>>> a = 9
>>> b = a
>>> a is b
True
>>> b is a
True
>>> hex(id(a))
'0x9a34e0'
>>> hex(id(b))
'0x9a34e0'

现在我理解上面的部分,但是当我指定b = 9时:

>>> b = 9
>>> a is b
True
>>> b is a 
True
>>> hex(id(a))
'0x9a34e0'
>>> hex(id(b))
'0x9a34e0'

我不明白:为什么ba仍然是同一个对象?为什么不分配新制作的新物品呢?如果我们在lists的情况下寻找并行情况,则不会发生这种情况:

>>> x = [1, 2, 3]
>>> y = x
>>> x is y
True
>>> y is x
True
>>> hex(id(x))
'0x7fc588004e48'
>>> hex(id(y))
'0x7fc588004e48'
>>> y = [1, 2, 3]
>>> x is y
False
>>> y is x
False
>>> hex(id(x))
'0x7fc588004e48'
>>> hex(id(y))
'0x7fc588009a48'

为什么int的变量即使在重新分配后仍然被认为是相同的?但是,在list中,我分配了相同的list,但是我了解了一个新对象。

1 个答案:

答案 0 :(得分:1)

在第一个示例中,Python没有为b分配相同的ID,因为您要为其分配a,而是因为您要为其分配9

Python中的小整数(从-5到256)被缓存以使数学运算更快。因此,具有相同小整数值的每个变量也指相同的内存地址,并且具有相同的ID。实际上,您可以执行id(9)并查看它等于id(a)