Python初始化列表的列表

可能重复:
Python列表追加行为

我打算初始化长度为n的列表。

x = [[]] * n 

但是,这不知何故将列表链接在一起。

 >>> x = [[]] * 3 >>> x[1].append(0) >>> x [[0], [0], [0]] 

我希望有这样的东西:

 [[], [0], []] 

有任何想法吗?

问题是它们在内存中完全一样。 当你使用[x]*n语法时,你得到的是许多x对象的列表,但它们都是对同一个对象的引用。 它们不是不同的实例,而只是对同一个实例的引用。

要列出3个不同的列表,请执行以下操作:

 x = [[] for i in range(3)] 

这给你3个单独的[]实例,这是你想要的

[[]]*n类似于

 l = [] x = [] for i in range(n): x.append(l) 

[[] 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,ie 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(), ie unique objects this time