Изменения в списках неожиданно отражаются в подспискахPython

Программы на Python
Anonymous
Изменения в списках неожиданно отражаются в подсписках

Сообщение Anonymous »

Я создал список списков:

Код: Выделить всё

>>> xs = [[1] * 4] * 3
>>> print(xs)
[[1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1]]
Затем я изменил одно из самых внутренних значений:

Код: Выделить всё

>>> xs[0][0] = 5
>>> print(xs)
[[5, 1, 1, 1], [5, 1, 1, 1], [5, 1, 1, 1]]
Я ожидал, что это повлияет только на первый подсписок, а не на все из них. То есть:

Код: Выделить всё

>>> print(xs)
[[5, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1]]
Почему каждый первый элемент каждого подсписка изменился на 5?


См. также:
  • Как клонировать список, чтобы он не менялся неожиданно после назначения? и Как инициализировать двумерный массив (список списков, если не использовать NumPy) в Python? для обхода проблемы
  • Список словарей хранит только последнее добавленное значение на каждой итерации для аналогичной проблемы со списком диктов
  • Как инициализировать словарь пустых списков в Python? для аналогичной проблемы со списком списков


Подробнее здесь: https://stackoverflow.com/questions/240 ... expectedly

Вернуться в «Python»