2015-01-01 38 views
0

我想高效地將一堆變量設置爲空列表。但是,使用這種方法,對一個變量的操作似乎適用於所有人:將許多變量設置爲相同:添加到一個變量添加到許多

>>> r1,r2,r3,r4,r5,r6,r7,r8=[[]]*8 
>>> r1 
[] 
>>> r1+=[2] 
>>> r1,r2 
([2], [2]) 

這是爲什麼?另外,什麼是使每個變量獨立的最有效的方法?

+0

爲什麼不只是有一個列表的列表?與8個變量相反?甚至字典? – Ffisegydd

+0

@Ffisegydd有趣。關於你鏈接的問題:如果語法[x] * 4創建了一個4項目列表,其內容全部引用同一個對象,爲什麼[[x] * 4] * 2沒有完成相同的操作,但共有8個對象?爲什麼只有每個內部列表的第一個元素髮生了變化? – doublefelix

回答

1

[[]]*8會創建一個8個對同一個列表對象的引用列表。這就是爲什麼當你更新它們時它們都會受到影響。爲了使八個不同的列表,使用generator expression

r1,r2,r3,r4,r5,r6,r7,r8 = ([] for _ in range(8)) 

你也可以使用一個list comprehension

r1,r2,r3,r4,r5,r6,r7,r8 = [[] for _ in range(8)]