Почему список n принимает значения списка b, если я создал список b, как b = list(n)
Я создал две матрицы (n и b), где матрица n должна быть неизменяемой и должна хранить введенные числа, а в матрице b должны происходить изменения, основываясь на данных из матрицы n ( число b[i][j] является суммой 4-х соседних чисел (сверху, справа, снизу, слева). Чтобы матрица n всегда оставалась в изначальном состоянии (с момента ввода чисел), я сделал ее копию b с помощью b = list(n), что, по сути, должно оставить матрицу n в покое. Но в итоге, по ходу действия программы, матрица n принимает значения матрицы b. В результате код работает неправильно, так как все значения увеличиваются в арифметической прогрессии. Почему так происходит и как это исправить?
i = 0
n = []
while True:
n.append(input().split())
if ["end"] in n:
n.remove(["end"])
break
for i in range(len(n)):
for j in range(len(n[i])):
n[i][j] = int(n[i][j])
b = list(n)
for i in range(len(b)):
for j in range(len(b[i])):
b[i][j] = 0
b[i][j] += n[i - 1][j] + n[i][j - 1]
if i + 1 == len(b):
b[i][j] += n[0][j]
else:
b[i][j] += n[i + 1][j]
if j + 1 == len(b[j]):
b[i][j] += n[i][0]
else:
b[i][j] += n[i][j + 1]
print(b[i][j], end=" ")
print()
Ответы (1 шт):
list копирует только элементы верхнего уровня. У вас есть вложенные списки, они так не копируются, копируются ссылки на них же. Используйте deepcopy, чтобы скопировать вложенные списки:
from copy import deepcopy
b = deepcopy(n)