當我編寫一個簡單的Python腳本,我定義了一個新的列表如下:
A=[[],]*10
我想要做的就是初始化一個長度爲10的列表,每個元素都是一個空列表。
當我做這樣的事情:
A[0].append(["abc",])
我只是想追加此["abc",]
到A[0]
,它變成是在一個每一個元素與["abc",]
附加我知道這可能由於我的初始化(A=[[],]*10
)。我只想知道爲什麼發生這種情況。
當我編寫一個簡單的Python腳本,我定義了一個新的列表如下:
A=[[],]*10
我想要做的就是初始化一個長度爲10的列表,每個元素都是一個空列表。
當我做這樣的事情:
A[0].append(["abc",])
我只是想追加此["abc",]
到A[0]
,它變成是在一個每一個元素與["abc",]
附加我知道這可能由於我的初始化(A=[[],]*10
)。我只想知道爲什麼發生這種情況。
您正在創建一個列表,其中包含10個對同一個空列表的引用。
你應該用一個列表理解來代替:
A = [[] for _ in range(10)]
在列表解析,您通過這些循環來創建一個新的列表。如果你使用python 2,你應該使用xrange
而不是range
(儘管只有10個元素不會有太大的區別)。
謝謝。有用! –
你的表達A=[[]]*10
相當於:
a = []
A = [a]*10
這意味着,一個由10只引用一個且相同的列表。
所有的空列表都是對同一對象的引用。
'[x,]'最好寫成'[x]'。無論如何,請注意'list * int'不*克隆對象。 – 2012-09-22 21:08:56