Ao ler a documentação dict.copy(), ele diz que faz uma cópia superficial do dicionário. O mesmo vale para o livro que estou seguindo (Beazley's Python Reference), que diz:
O método m.copy () faz uma cópia superficial dos itens contidos em um objeto de mapeamento e os coloca em um novo objeto de mapeamento.
Considere isto:
>>> original = dict(a=1, b=2)
>>> new = original.copy()
>>> new.update({'c': 3})
>>> original
{'a': 1, 'b': 2}
>>> new
{'a': 1, 'c': 3, 'b': 2}
Portanto, presumi que isso atualizaria o valor de original(e adicionaria 'c': 3) também porque eu estava fazendo uma cópia superficial. Como se você fizer isso para uma lista:
>>> original = [1, 2, 3]
>>> new = original
>>> new.append(4)
>>> new, original
([1, 2, 3, 4], [1, 2, 3, 4])
Isso funciona conforme o esperado.
Como as duas cópias são rasas, por que dict.copy()isso não funciona como eu esperava? Ou meu entendimento de cópia superficial e profunda é falha?
![Ilustração de 'a = b': 'a' e 'b' apontam para '{1: L}', 'L' aponta para '[1, 2, 3]'.](https://i.stack.imgur.com/4AQC6.png)
![Ilustração de 'b = a.copy ()': 'a' aponta para '{1: L}', 'b' aponta para '{1: M}', 'L' e 'M' apontam para '[ 1, 2, 3] '.](https://i.stack.imgur.com/Vtk4m.png)
![Ilustração de 'b = copy.deepcopy (a)': 'a' aponta para '{1: L}', 'L' aponta para '[1, 2, 3]'; 'b' aponta para '{1: M}', 'M' aponta para uma instância diferente de '[1, 2, 3]'.](https://i.stack.imgur.com/BO4qO.png)