Durante la lettura della documentazione per dict.copy(), dice che fa una copia superficiale del dizionario. Lo stesso vale per il libro che sto seguendo (Beazley's Python Reference), che dice:
Il metodo m.copy () crea una copia superficiale degli elementi contenuti in un oggetto di mappatura e li inserisce in un nuovo oggetto di mappatura.
Considera questo:
>>> 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}
Quindi ho pensato che questo avrebbe aggiornato il valore di original(e aggiunto 'c': 3) anche da quando stavo facendo una copia superficiale. Come se lo facessi per un elenco:
>>> original = [1, 2, 3]
>>> new = original
>>> new.append(4)
>>> new, original
([1, 2, 3, 4], [1, 2, 3, 4])
Funziona come previsto.
Dal momento che entrambi sono copie superficiali, perché dict.copy()non funziona come mi aspetto? O la mia comprensione della copia superficiale vs profonda è errata?
![Illustrazione di "a = b": "a" e "b" indicano entrambi "{1: L}", "L" indica "[1, 2, 3]".](https://i.stack.imgur.com/4AQC6.png)
![Illustrazione di 'b = a.copy ()': 'a' indica '{1: L}', 'b' indica '{1: M}', 'L' e 'M' indicano entrambi '[ 1, 2, 3] '.](https://i.stack.imgur.com/Vtk4m.png)
![Illustrazione di 'b = copy.deepcopy (a)': 'a' indica '{1: L}', 'L' indica '[1, 2, 3]'; 'b' indica '{1: M}', 'M' indica un'istanza diversa di '[1, 2, 3]'.](https://i.stack.imgur.com/BO4qO.png)