如何将多个列表实例化为相同的值,但内存不同?
问题描述:
我需要三个不同的清单申报(最初)相同的值:如何将多个列表实例化为相同的值,但内存不同?
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的简短(最好是一行)方法,它会生成不同的列表。我怎样才能做到这一点?
答
如果你真的想要一个班轮,你可以做这样的事情:
a, b, c = (["Ralph"] for _ in range(3))
但坦率地说,如果它像一个小名单例如,我只是让它很明显:
a, b, c = ["Ralph"], ["Ralph"], ["Ralph"]
答
使用生成器和元组解压缩。
a, b, c = (["Ralph"] for _ in range(3))
您希望不同的变量绑定到不同的可变对象。它必须为每个变量创建独立的可变对象。
但是,您可以将不同的变量绑定到单个不可变对象。在修改这些变量的一个变量后,您将该变量绑定到一个新的不可变对象。例如:
>>> a, b, c = ("Ralph",)
>>> a += ("Wiggum",)
>>> a
("Ralph", "Wiggum")
>>> b
("Ralph",)
>>> c
("Ralph",)
入住这link
但是对于有很多列表声明的情况,ouch。不过,列表理解是neato。谢谢。 – SeeDerekEngineer