Le istruzioni di assegnazione in Python non copiano gli oggetti, ma creano associazioni tra una destinazione e un oggetto.
quindi, dict2 = dict1
risulta un altro legame tra dict2
e l'oggetto a cui si fa dict1
riferimento.
se vuoi copiare un dict, puoi usare il copy module
. Il modulo di copia ha due interfacce:
copy.copy(x)
Return a shallow copy of x.
copy.deepcopy(x)
Return a deep copy of x.
La differenza tra copia superficiale e profonda è rilevante solo per gli oggetti composti (oggetti che contengono altri oggetti, come elenchi o istanze di classe):
Una copia superficiale costruisce un nuovo oggetto composto e quindi (per quanto possibile) inserisce riferimenti in esso agli oggetti trovati nell'originale.
Una copia profonda costruisce un nuovo oggetto composto e quindi, ricorsivamente, inserisce copie degli oggetti trovati nell'originale.
Ad esempio, in Python 2.7.9:
>>> import copy
>>> a = [1,2,3,4,['a', 'b']]
>>> b = a
>>> c = copy.copy(a)
>>> d = copy.deepcopy(a)
>>> a.append(5)
>>> a[4].append('c')
e il risultato è:
>>> a
[1, 2, 3, 4, ['a', 'b', 'c'], 5]
>>> b
[1, 2, 3, 4, ['a', 'b', 'c'], 5]
>>> c
[1, 2, 3, 4, ['a', 'b', 'c']]
>>> d
[1, 2, 3, 4, ['a', 'b']]
dict1
edict2
indicare lo stesso dict.