Python инициализация списка списков [дубликат]
Возможные Дубликаты:
Python список добавить поведение
Я намерен инициализировать список списка с длиной n.
x = [[]] * n
однако это каким-то образом связывает списки вместе.
>>> x = [[]] * 3
>>> x[1].append(0)
>>> x
[[0], [0], [0]]
Я ожидаю, что будет что-то вроде:
[[], [0], []]
какие идеи?
1 ответ:
проблема в том, что все они являются одним и тем же точным списком в памяти. Когда вы используете
[x]*nсинтаксис, что вы получаете списокnмногоxобъекты, но все они являются ссылками на один и тот же объект. Они не являются отдельными экземплярами, скорее, простоnссылки на один и тот же экземпляр.чтобы составить список из 3 разных списков, сделайте следующее:
x = [[] for i in range(3)]это дает вам 3 отдельных экземпляра
[], который является то, что вы хотите
[[]]*nis похоже на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,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
Comments