Вебинары Разобраться в IT Реферальная программа
Программирование Аналитика Дизайн Маркетинг
ПРИХОДИТЕ УЧИТЬСЯ НОВОЙ ПРОФЕССИИ ЛЕТОМ СО СКИДКОЙ ДО 70% Забронировать скидку
07 Июл 2023
1 мин
12

Неожиданное отражение изменений в подсписках Python

Часто при работе с Python могут возникнуть ситуации, когда при изменении элемента в одном из подсписков, этот элемент меняется во всех подсписках. Рассмотрим

Часто при работе с 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]]

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

Добавить комментарий

Подарок
Забрать подарок