var = [[0] * 5] * 5 Помогите понять списки Python? - PullRequest
4 голосов
/ 01 февраля 2012

Я натолкнулся на декларацию списка Python.Я немного озадачен поведением этого.Сомоне, пожалуйста, объясните это.Ценю твою помощь.

    >>> v  = [[0]*2]*2
    >>> v
    [[0, 0], [0, 0]]
    >>> v[1][1] = 23
    >>> v
    [[0, 23], [0, 23]]
    >>> v[1][1] = 44
    >>> v
    [[0, 44], [0, 44]]
    >>>

Ответы [ 2 ]

7 голосов
/ 01 февраля 2012

Оператор * для списков повторяет их содержимое, как вы можете ясно увидеть в выводе.

Однако он не копирует элементы, он просто копирует ссылки на объекты. Таким образом, в этом случае оба [0,0 ] имеют один и тот же базовый объект списка, который должен объяснить это явление.

Чтобы проверить это, попробуйте v[0] = [0,44] назначить новый (и, следовательно, независимый!) Объект списка первому элементу основного списка; затем повторите попытку v[1][1]. На этот раз изменится только одна запись.

0 голосов
/ 01 февраля 2012

v - это просто список списков.

* первая строчка означает «повторить 2 раза 0 в моем списке]. Таким образом, каждый список гнезд имеет размер 2 и содержит нули.

Затем вы просто устанавливаете значения для определенных ячеек вашего списка списков:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...