0
我想高效地將一堆變量設置爲空列表。但是,使用這種方法,對一個變量的操作似乎適用於所有人:將許多變量設置爲相同:添加到一個變量添加到許多
>>> r1,r2,r3,r4,r5,r6,r7,r8=[[]]*8
>>> r1
[]
>>> r1+=[2]
>>> r1,r2
([2], [2])
這是爲什麼?另外,什麼是使每個變量獨立的最有效的方法?
我想高效地將一堆變量設置爲空列表。但是,使用這種方法,對一個變量的操作似乎適用於所有人:將許多變量設置爲相同:添加到一個變量添加到許多
>>> r1,r2,r3,r4,r5,r6,r7,r8=[[]]*8
>>> r1
[]
>>> r1+=[2]
>>> r1,r2
([2], [2])
這是爲什麼?另外,什麼是使每個變量獨立的最有效的方法?
做[[]]*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)]
爲什麼不只是有一個列表的列表?與8個變量相反?甚至字典? – Ffisegydd
@Ffisegydd有趣。關於你鏈接的問題:如果語法[x] * 4創建了一個4項目列表,其內容全部引用同一個對象,爲什麼[[x] * 4] * 2沒有完成相同的操作,但共有8個對象?爲什麼只有每個內部列表的第一個元素髮生了變化? – doublefelix