2017-07-26 42 views
2

我需要三個不同的清單申報(最初)相同的值:如何將多個列表實例化爲相同的值,但內存不同?

a = b = c = ["Ralph"] 

但是,當我追加只是「一」:

a.append("Wiggum") 

以下結果產生:

print a, b, c 
>>["Ralph", "Wiggum"] ["Ralph", "Wiggum"] ["Ralph", "Wiggum"] 

我需要的是:

print a, b, c 
>>["Ralph", "Wiggum"] ["Ralph"] ["Ralph"] 

我知道如果我使用copy.copy()或實例化一個新列表,這將在內存中創建一個新的空間。但是我正在尋找一種類似於a = b = c的簡短(最好是一行)方法,它會生成不同的列表。我怎樣才能做到這一點?

回答

4

如果你真的想要一個班輪,你可以做這樣的事情:

a, b, c = (["Ralph"] for _ in range(3)) 

但坦率地說,如果它像一個小名單例如,我只是讓它很明顯:

a, b, c = ["Ralph"], ["Ralph"], ["Ralph"] 
+0

但是對於有很多列表聲明的情況,ouch。不過,列表理解是neato。謝謝。 – SeeDerekEngineer

1

使用生成器和元組解壓縮。

a, b, c = (["Ralph"] for _ in range(3)) 

您希望不同的變量綁定到不同的可變對象。它必須爲每個變量創建獨立的可變對象。

但是,您可以將不同的變量綁定到單個不可變對象。在修改這些變量的一個變量後,您將該變量綁定到一個新的不可變對象。例如:

>>> a, b, c = ("Ralph",) 
>>> a += ("Wiggum",) 
>>> a 
("Ralph", "Wiggum") 
>>> b 
("Ralph",) 
>>> c 
("Ralph",) 

入住這link

相關問題