我打算初始化一个长度为 n 的列表列表。
x = [[]] * n
但是,这以某种方式将列表链接在一起。
>>> x = [[]] * 3 >>> x[1].append(0) >>> x [[0], [0], [0]]
我希望有类似的东西:
[[], [0], []]
有任何想法吗?
问题是它们在内存中都是完全相同的列表。当您使用该[x]*n语法时,您得到的是一个包含n许多x对象的列表,但它们都是对同一个对象的引用。它们不是不同的实例,而是n对同一个实例的引用。
[x]*n
n
x
要列出 3 个不同的列表,请执行以下操作:
x = [[] for i in range(3)]
这为您提供了 3 个单独的实例[],这就是您想要的
[]
[[]]*n类似于
[[]]*n
l = [] x = [] for i in range(n): x.append(l)
虽然[[] for i in range(3)]类似于:
[[] for i in range(3)]
x = [] for i in range(n): x.append([]) # appending a new list!
In [20]: x = [[]] * 4 In [21]: [id(i) for i in x] Out[21]: [164363948, 164363948, 164363948, 164363948] # same id()'s for each list,i.e same object In [22]: x=[[] for i in range(4)] In [23]: [id(i) for i in x] Out[23]: [164382060, 164364140, 164363628, 164381292] #different id(), i.e unique objects this time