2012-09-22 35 views
0

可能重複:
Python list confusionpython中的= [[],] * 10

當我編寫一個簡單的Python腳本,我定義了一個新的列表如下:

A=[[],]*10 

我想要做的就是初始化一個長度爲10的列表,每個元素都是一個空列表。

當我做這樣的事情:

A[0].append(["abc",]) 

我只是想追加此["abc",]A[0],它變成是在一個每一個元素與["abc",]

附加我知道這可能由於我的初始化(A=[[],]*10)。我只想知道爲什麼發生這種情況。

+0

'[x,]'最好寫成'[x]'。無論如何,請注意'list * int'不*克隆對象。 – 2012-09-22 21:08:56

回答

2

您正在創建一個列表,其中包含10個對同一個空列表的引用。

你應該用一個列表理解來代替:

A = [[] for _ in range(10)] 

在列表解析,您通過這些循環來創建一個新的列表。如果你使用python 2,你應該使用xrange而不是range(儘管只有10個元素不會有太大的區別)。

+0

謝謝。有用! –

3

你的表達A=[[]]*10相當於:

a = [] 
A = [a]*10 

這意味着,一個由10只引用一個且相同的列表。

1

所有的空列表都是對同一對象的引用。