2017-07-26 40 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

相关问题