При изменении оригинального списка изменяется копия

У меня есть 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))
→ Ссылка