В заготовке таблицы три строки и два значения в каждой. Вы меняете одну ячейку, а новое число появляется сразу в трёх строках. Причина может быть в конструкции [[0, 0]] * 3: она повторяет ссылки на один вложенный список. Разберём, чем одинаковое содержимое строк отличается от общего изменяемого объекта.

Это учебная матрица из трёх вымышленных записей A01–A03 с двумя числовыми полями. Нули здесь заданы как значения, а не обозначения пропуска. Запись 7 во второе поле A01 — условная операция кода, не настоящее измерение. ID нужны для объяснения позиций: они не являются элементами самой числовой матрицы.

Почему исходная печать не выявляет проблему

И повторение, и создание каждой строки отдельно сначала выглядят как [[0, 0], [0, 0], [0, 0]]. Равенство напечатанных значений не показывает, являются ли вложенные строки одним объектом. В официальном FAQ Python о многомерных списках разобран этот механизм: повторение списка через * создаёт ссылки на существующие объекты, а не независимые копии вложенных строк.

Полный пример с одной записью в ячейку

bad = [[0, 0]] * 3
bad[0][1] = 7

good = [[0, 0] for _ in range(3)]
good[0][1] = 7

print("bad", bad)
print("good", good)
print("bad_second_column_sum", sum(row[1] for row in bad))
print("good_second_column_sum", sum(row[1] for row in good))
print("bad_rows_same_object", bad[0] is bad[1])
print("good_rows_same_object", good[0] is good[1])

outer_copy = bad.copy()
print("outer_is_bad", outer_copy is bad)
print("first_row_shared", outer_copy[0] is bad[0])

Результат выполнения:

bad [[0, 7], [0, 7], [0, 7]]
good [[0, 7], [0, 0], [0, 0]]
bad_second_column_sum 21
good_second_column_sum 7
bad_rows_same_object True
good_rows_same_object False
outer_is_bad False
first_row_shared True

В bad одна присваиваемая ячейка относится к одному общему вложенному списку, на который ссылаются три позиции. В good выражение [0, 0] выполняется заново для каждой строки. После одинаковой команды good[0][1] = 7 остальные две строки сохраняют нули.

Сверьте строки и контрольную сумму

Условная запись   Второе поле: повторение / отдельные строки   
A01   7 / 7   
A02   7 / 0   
A03   7 / 0   
Сумма второго поля   21 / 7   
Авторская учебная схема, не интерфейс: в матрице 3 × 2 одна запись 7 в общий вложенный список видна в трёх строках, сумма второго поля 21. При отдельном создании строк тот же шаг даёт [7, 0, 0] и сумму 7. Нули заданы как значения; вымышленные данные не показывают изменение настоящего исследуемого показателя.
Авторская учебная схема, не интерфейс: в матрице 3 × 2 одна запись 7 в общий вложенный список видна в трёх строках, сумма второго поля 21. При отдельном создании строк тот же шаг даёт [7, 0, 0] и сумму 7. Нули заданы как значения; вымышленные данные не показывают изменение настоящего исследуемого показателя.

Для bad получается 7 + 7 + 7 = 21, для good — 7 + 0 + 0 = 7. Разница в итогах возникла из-за структуры объектов в программе. Она не означает рост исследуемого показателя и не разрешает подменять реальные исходные значения демонстрационными.

Почему копии только внешнего списка мало

В конце кода outer_copy — новый внешний список: outer_copy is bad даёт False. Но его первая строка остаётся тем же объектом, что bad[0]: соответствующая проверка даёт True. В документации copy поверхностная копия описана как новый составной объект со ссылками на элементы исходного. Поэтому bad.copy() не превращает три общие строки в независимые.

Для показанной заготовки исправление делается при создании матрицы: [[0, 0] for _ in range(3)]. Это решение именно для данного простого содержимого. Не переносите его без разбора на произвольные вложенные структуры и не считайте любую операцию повторения ошибочной: важно, какие объекты повторяются и будут ли они изменяться.

Проверка перед расчётом

  • Создавайте каждую изменяемую строку отдельно.
  • Проверьте одну контролируемую запись и убедитесь, что остальные строки не изменились.
  • Различайте сравнение значений и проверку тождества через is.
  • Сохраняйте входные данные отдельно от экспериментальных преобразований.
  • Сверяйте несколько строк и итог, а не только размер матрицы.

Если ошибка обнаружена в рабочем наборе, сначала определите, какие преобразования были выполнены, и вернитесь к сохранённому источнику. Нельзя восстановить три неизвестных исходных значения только из ошибочного итога 21. Ход исправления стоит отразить в журнале очистки данных, а параметры запуска — в записи окружения расчёта Python.

Завершённый результат упражнения

После одной условной записи 7 вариант с общей строкой даёт второй столбец [7, 7, 7] и сумму 21. Вариант с независимо созданными строками даёт [7, 0, 0] и сумму 7. Проверки is подтверждают различие объектов. Для этой заготовки выбран второй способ; он устраняет показанное совместное изменение, но не доказывает содержательную корректность настоящего набора данных.

Если нужна помощь с проверкой подготовки собственного исследовательского набора, можно согласовать консультацию по статистическому анализу. Передайте исходные файлы, описание полей и конкретную задачу проверки. Согласуйте объём помощи: устранение ошибки представления данных само по себе не выбирает метод анализа и не подтверждает научный вывод.