python copy.deepcopy parece superficial
Estou tentando inicializar uma lista de listas representando uma matriz 3x3:
import copy
m = copy.deepcopy(3*[3*[0]])
print(m)
m[1][2] = 100
print(m)
e a saída é:
[[0, 0, 0], [0, 0, 0], [0, 0, 0]]
[[0, 0, 100], [0, 0, 100], [0, 0, 100]]
o que não é o que eu esperava, pois os últimos elementos de cada linha são compartilhados! Obtive o resultado necessário usando:
m = [ copy.deepcopy(3*[0]) for i in range(3) ]
mas não entendo por que o primeiro (e mais simples) formulário não funciona. Não édeepcopy
deveria ser profundo?