Python, инициализирующий список списков

Возможный дубликат:
Добавление списка Python

Я намерен инициализировать список списка с длиной n.

x = [[]] * n 

Однако это как-то связывает списки вместе.

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

Я ожидаю иметь что-то вроде:

 [[], [0], []] 

Есть идеи?

One Solution collect form web for “Python, инициализирующий список списков”

Проблема в том, что все они имеют одинаковый точный список в памяти. Когда вы используете синтаксис [x]*n , то, что вы получаете, это список из n многих объектов x , но все они ссылаются на один и тот же объект. Это не разные экземпляры, а всего лишь n ссылок на один и тот же экземпляр.

Чтобы составить список из 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 
  • Как я могу умножить каждый элемент в списке на число?
  • Как преобразовать это для цикла в понимание списка?
  • Списки Python: индексы heapq.nlargest с повторяющимися значениями в списке
  • В чем разница между LIST.append (1) и LIST = LIST + (Python)
  • как объединить два подсписок, разделяющих какое-то общее число?
  • операции python-list
  • Как добавить значение None в список в Python?
  • Python: определение списка определенного типа объекта
  • Python: поиск максимальных данных
  • добавить один и тот же элемент в несколько подписок в python
  • Как отсортировать список целых чисел в порядке убывания python
  • Python - лучший язык программирования в мире.