При изменении оригинального списка изменяется копия
У меня есть 3 мерный список, я штампую несколько его копий и сохраняю в другой список. При изменении любого из копий другие тоже меняются, несмотря на то, что я пользовался функцией [список].copy(). Как это исправить? P.S. Это кусок из игры, в которой И.И. учиться водить машину. Код:
def new_generation(weights, local_quantity = 10, deviation = 0.5):
global cart, carts, quantity
quantity = local_quantity
carts = []
new_weights = []
for i in range(quantity):
new_weights.append(weights.copy())
for l in range(quantity):
for i in range(len(weights)):
for j in range(len(weights[i])):
for t in range(len(weights[i][j])):
new_weights[l][i][j][t] += random.uniform(-deviation, deviation)
for l in range(quantity):
carts.append(Cart(l, new_weights[l].copy()))
start_game()
Ответы (1 шт):
Автор решения: CrazyElf
→ Ссылка
Вы копируете через .copy() только верхний уровень списка, а там у вас ещё вложенные списки, они так не копируются, а передаются в виде ссылок. Нужно копировать все вложенные списки с помощью deepcopy:
import copy
new_weights.append(copy.deepcopy(weights))