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

Возможный дубликат:
Неожиданная функция в списке списков 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 раза.

  • Странное поведение Python со списком и добавлением
  • Python string.join (список) в массиве объектов, а не строковый массив
  • Распаковка 1-кортежа в списке длины 1
  • Как добавить список во второй список (списки конкатенаций)
  • Найти максимальное значение в списке кортежей в Python
  • Поиск равных значений из списка списка кортежей в Python
  • Объект 'int' не может быть вызван при использовании функции sum в списке
  • Создание списка из списка списков в Python
  • Использование python для возврата списка целых чисел
  • Python :: "IndexError: индекс индекса вне диапазона"
  • Перечислять два списка python одновременно?
  •  
    Interesting Posts for Van-Lav

    Извлечение информации с веб-сайта с помощью Xpath, Python

    Инструмент для автоматического создания данных для модели django

    Обратить строку Python, не опуская старт и конец

    Лучшая стратегия развертывания для движка Google для Python

    Как получить список всех повторяющихся элементов с помощью pandas в python?

    Удаление корня из дерева в python

    Библиотека OCR Python или механизм рукописного распознавания символов

    Python: Элегантный способ проверить, соответствует ли хотя бы одно регулярное выражение в списке строке

    Библиотека, подобная коллекции Python. Библиотека Counter для C # -> Получение разницы между значениями между двумя объектами словаря в C #

    Объедините два списка, один как ключи, один как значения, в dict в Python

    Python / postgres / psycopg2: получение идентификатора только что вставленной строки

    Django: запретить can_delete в GenericStackedInline

    Как у меня есть два поля для выбора?

    Доступ к ключу на фабрике defaultdict

    Обновление / перезагрузка python

    Python - лучший язык программирования в мире.