Ответ 1
Проблема в том, что они все одинаковые точные списки в памяти. Когда вы используете синтаксис [x]*n
, вы получаете список объектов n
many x
, но все они ссылаются на один и тот же объект. Это не разные экземпляры, а просто ссылки n
на один и тот же экземпляр.
Чтобы составить список из трех разных списков, сделайте следующее:
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() 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