Часто при работе с Python могут возникнуть ситуации, когда при изменении элемента в одном из подсписков, этот элемент меняется во всех подсписках. Рассмотрим пример:
>>> список = [[1] * 3] * 3
>>> print(список)
[[1, 1, 1], [1, 1, 1], [1, 1, 1]]
Если теперь изменить один из элементов первого подсписка, то он изменится и в остальных подсписках:
>>> список[0][0] = 5
>>> print(список)
[[5, 1, 1], [5, 1, 1], [5, 1, 1]]
Почему это происходит?
Важно понимать, что в Python переменные являются ссылками на объекты. Когда мы создаём список списков, как в примере выше, мы фактически создаём список, который содержит ссылки на один и тот же объект (список [1,1,1]). Изменяя этот объект, мы меняем его везде, где он находится.
Чтобы избежать этого, можно создать новый список каждый раз, когда мы хотим добавить его в главный список. Это можно сделать, например, с помощью генератора списков:
>>> список = [[1] * 3 for _ in range(3)]
>>> print(список)
[[1, 1, 1], [1, 1, 1], [1, 1, 1]]
Теперь, если изменить один из элементов первого подсписка, он не изменится в остальных:
>>> список[0][0] = 5
>>> print(список)
[[5, 1, 1], [1, 1, 1], [1, 1, 1]]
Таким образом, чтобы избежать неожиданных изменений в подсписках, нужно создавать новый список каждый раз, когда мы хотим его добавить в главный список.
Добавить комментарий