Zuweisungsanweisungen in Python kopieren keine Objekte, sondern erstellen Bindungen zwischen einem Ziel und einem Objekt.
So dict2 = dict1
ergibt sich eine weitere Bindung zwischen dict2
und das Objekt , das dict1
Bezug zu nehmen.
Wenn Sie ein Diktat kopieren möchten, können Sie das verwenden copy module
. Das Kopiermodul hat zwei Schnittstellen:
copy.copy(x)
Return a shallow copy of x.
copy.deepcopy(x)
Return a deep copy of x.
Der Unterschied zwischen flachem und tiefem Kopieren ist nur für zusammengesetzte Objekte relevant (Objekte, die andere Objekte enthalten, wie Listen oder Klasseninstanzen):
Eine flache Kopie erstellt ein neues zusammengesetztes Objekt und fügt dann (soweit möglich) Verweise auf die im Original gefundenen Objekte ein.
Eine tiefe Kopie erstellt ein neues zusammengesetztes Objekt und fügt dann rekursiv Kopien der im Original gefundenen Objekte ein.
Zum Beispiel 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')
und das Ergebnis ist:
>>> 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
und daraufdict2
verweisen.