2012-03-04 92 views
2

可能重複:
Python list confusion蟒蛇空單招

我有一個小問題有關Python列表:

爲什麼會出現這種情況?

x = [[]] * 4 
x[0].append('x') -> [['x'], ['x'], ['x'], ['x']] 
+1

。而且由於在你的列表中你有4個列表指向相同的內存空間,如果你修改其中的一個,這個改變將影響所有內存空間。 – rubik 2012-03-04 11:44:04

+0

此外,請參閱[Python常見問題中的此條目](http://docs.python.org/faq/programming.html#how-do-i-create-a-multidimensional-list) – BioGeek 2012-03-04 16:07:19

+0

好的,謝謝.. – cval 2012-03-04 20:48:45

回答

6

[]相同的情況下被複制,所以當你追加到第一個'x',你實際上將其追加到所有的 - 因爲他們都是同一個對象!

做正確的做法是,在每次明確創建一個新的列表實例:因爲您是複製相同的列表四次

x = [[] for _ in range(4)] 
+1

我爲此答案添加了一個可能的解決方案。希望你不介意:) – 2012-03-04 11:51:01

+0

謝謝!似乎是合理的)) – cval 2012-03-04 11:55:18

+0

要清楚:實例[]不被*重複*。表達式[[[]] * 4'創建一個帶有四個引用的列表,其中包含[]的同一個實例。 – alexis 2012-03-04 11:59:19