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

Перейти в телеграм, чтобы получить результаты теста
Пройдите тест, узнайте какой профессии подходите
Вам подходит профессия:
Аналитик данных
Основные характеристики профессии:
не нужно общаться с людьми
логика
анализ
поиск закономерностей
работа с числами
Построим личный план перехода в профессию для вас бесплатно
- убедитесь, подходит вам профессия или нет
- получите оценку своих навыков и шансов освоить профессию
- забронируем за вами скидку 55% на обучение, пока думаете
Позвоним вам в течение часа — не пропустите звонок
Чем занимается специалист
Специалист создает все онлайн-продукты, программы, приложения, игры и сайты, которыми вы пользуетесь каждый день.
Создает — значит описывает последовательность действий на специальном языке программирования. Настраивает действия, что должно произойти, если пользователь нажмет на кнопку.
Средняя зарплата начинающего специалиста в первый год работы:
от 50 000 ₽
Что надо знать и уметь, чтобы выучиться на аналитика:
- базовое школьное образование
- уверенные навыки работы с компьютером
- опыт выполнения задач в конкретные сроки
Глубокие знания математики или английского не нужны
Почему мы рекомендуем вам эту профессию
Ваш скрытый талант:
наблюдательность
Часто при работе с 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]]
Таким образом, чтобы избежать неожиданных изменений в подсписках, нужно создавать новый список каждый раз, когда мы хотим его добавить в главный список.
Добавить комментарий