ai
3 мин
12 августа 2026 г.
Источник: Dev.to AI Feed

Ловушка умножения списков Python: почему ваши вложенные списки мутируют вместе

ail akram
ail akram
RSS AI Ingest
Ловушка умножения списков Python: почему ваши вложенные списки мутируют вместе

Вы строите 2D-матрицу для задачи конкурентного программирования. Быстро и уверенно вы пишете: сетка = [[]] * 3 Три пустые строки, готовые для хранения ваших данных. Вы обновляете первую строку: сетка[0].append(1) Вы печатаете результат, ожидая [[1], [...

Вы строите 2D-матрицу для задачи конкурентного программирования. Быстро и уверенно вы пишете: сетка = [[]] * 3 Три пустые строки, готовые для хранения ваших данных. Вы обновляете первую строку: сетка[0].append(1) Вы печатаете результат, ожидая [[1], [], []]. Вместо этого Python передает вам следующее: print(сетка) # [[1], [1], [1]] Менялась каждая строка. Не только тот, которого ты коснулся. Если вы уперлись в эту стену, вы попали прямо в ловушку умножения вложенных списков Python, одну из самых распространенных и самых запутанных ошибок для разработчиков, переходящих от простых списков к вложенным структурам данных. Это похоже на ошибку Python. Это не так. Это прямое следствие того, как Python обрабатывает ссылки на объекты, и как только вы поймете этот механизм, вы больше никогда на него не попадетесь. Давайте разберемся, почему это происходит и как правильно строить вложенные списки. Проблемный код: ошибка, которая выглядит как волшебство (в плохом смысле) Вот ловушка в чистом виде: сетка = [[]] * 3 сетка[0].append(1) print(grid) # Вывод: [[1], [1], [1]] -> Неожиданно! На первый взгляд это выглядит вполне разумно. [[]] * 3 должно означать «три пустых списка», верно? И Grid[0].append(1) должен влиять только на первый. Но Питон этого не делает.

Хотите внедрить ИИ в ваш бренд?

Спроектируем и развернем автономных агентов и современный цифровой стек под ваши задачи.

Рассчитать проект