Понимание списков списков

Возможный дубликат:
Неожиданная функция в списке списков Python
Путаница списка Python

Рассмотрим следующий код:

a = [[]] * 3 a[1].append("foo") 

Я ожидал бы, что значение a станет:

 [[], ["foo"], []] 

вместо этого обновляется каждый элемент a :

 [["foo"], ["foo"], ["foo"]] 

Может кто-нибудь объяснить, почему каждый элемент списка получил обновление вместо определенного элемента ( a[1] )? В моей логике есть что-то принципиально неправильное?

Для чего это стоит, я запускаю Python2.7

2 Solutions collect form web for “Понимание списков списков”

Списки в Python – это объекты, это означает, что когда вы назначаете список другой переменной, изменение либо изменит фактический список, например

 a = [] b = a b.append("hi") print a // a is now ["hi"] 

Когда вы выполняете задание

 a = [[]] * 3 

Это то же самое, что сказать

 inner_list = [] outer_list = [inner_list, inner_list, inner_list] 

Другими словами, все внутренние списки являются одним и тем же объектом. Не разные объекты, как вы думаете.

Чтобы получить эффект, который вы хотите, вы должны сделать:

 outer_list = [] for i in range(0, 3): outer_list.append([]) 

Что создает 3 внутренних списка объектов и помещает их во внешний объект.

Я думаю, вы обнаружите, что происходит, это то, что делает python:

 outer_list = [] inner_list = [] outer_list = [inner_list,inner_list,inner_list] 

или пояснить его более четко, outer_list и внутренний список создаются один раз, а затем inner_list копируется * 3 в outer_list , что означает, что все 3 списка в outer_list фактически являются ссылкой на тот же самый inner_list скопированный 3 раза.

  • Удалите все элементы, которые встречаются в одном списке из другого
  • Как получить n-й элемент списка python или по умолчанию, если он недоступен
  • у python есть конструктор списка?
  • Понимание списка Python с уникальными элементами
  • Получить индекс недавно добавленного элемента
  • Найти уникальные пары в списке пар
  • Объединение двух списков в кортежи в python
  • Сопоставление списков Python для создания нескольких списков
  • Python - лучший язык программирования в мире.