2014-02-15 137 views
0

有人请解释下列行为吗?Python:将元素添加到列表的元素中

X=2*[[]] 
print X 
X[0].append(1) 
print X 

产生

[[], []] 
[[1], [1]] 

我希望最后的名单是[[1], []]。事实上,以下

X=[[],[]] 
print X 
X[0].append(1) 
print X 

债收益率

[[], []] 
[[1], []] 

为什么这种差异?

+0

谢谢!我应该做'[[]在范围内(2)]'' – geo909

回答

5

您使用的乘法语法创建内容的浅表副本。其中的每个列表元素都将是对同一列表的新引用。

您给出的第二个示例实际上会生成两个不同列表的列表。

y = 2*[x] 

大致相当于在这两个地方做

y = [x] + [x] 

x指的是同一个列表。

>>> y = 2*[[]] 
>>> y[0].append(1) 
>>> y 
[[1], [1]] 
>>> x = [] 
>>> y = [x] + [x] 
>>> y 
[[], []] 
>>> y[0].append(1) 
>>> y 
[[1], [1]] 

要创建一个列表,其功能如同你的第二个例子,尝试

>>> y=[[] for n in range(2)] 
>>> y[0].append(1) 
>>> y 
[[1], []]