2016-09-21 45 views
1

我在Python交互shell试过一个非常基本的代码基本列表操作

>>> a=[1,2,3] 
>>> id(a) 
36194248L 
>>> a.append(4) 
>>> a 
[1, 2, 3, 4] 
>>> id(a) 
36194248L 
>>> 
>>> id([1,2,3]) 
36193288L 
>>> id([1,2,3].append(4)) 
506033800L 
>>> id([1,2,3].append(5)) 
506033800L 
>>> id([1,2,3].append(6)) 
506033800L 

问:当我一个列表分配给一个名为“A”的变量,并尝试添加更多的价值,该ID()不改变,但如果我尝试同样的事情,而不分配给变量,id()changes.Since列表是可变的(即允许在相同的内存地址更改),为什么这种行为是可见的?

回答

4

list.append()返回None,不在列表中。

您会得到该对象的id()结果,而None是单身人士。它会总是对于给定的Python解释器运行相同的:

>>> id(None) 
4514447768 
>>> [].append(1) is None 
True 
>>> id([].append(1)) 
4514447768 
1

因为list.append回报None,你在呼唤id(None),这只会有一个实例。