2014-02-15 171 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], []]