首先,我知道这不是一个很好的问题,但我从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'
我不明白:为什么b
与a
仍然是同一个对象?为什么不分配新制作的新物品呢?如果我们在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
,但是我了解了一个新对象。
答案 0 :(得分:1)
在第一个示例中,Python没有为b
分配相同的ID,因为您要为其分配a
,而是因为您要为其分配9
。
Python中的小整数(从-5到256)被缓存以使数学运算更快。因此,具有相同小整数值的每个变量也指相同的内存地址,并且具有相同的ID。实际上,您可以执行id(9)
并查看它等于id(a)
。