Manchmal ist eine Kopie erforderlich, damit Sie eine Kopie ändern können, ohne eine andere zu ändern. Python hat zwei Möglichkeiten, Kopien zu erstellen:
- Deep copy
- Shallow copy
Um diese Kopien zu erstellen, verwenden wir Kopieren Sie das Modul
. Wir verwenden das Modul copy
für flache und tiefe Kopiervorgänge. Zum Beispiel
# import copy module
import
kopieren
# Liste 1 initialisieren
li1
=
[
1
,
2
, [
3
,
5
],
4
]
# Kopie für flache Kopie verwenden
li2
=
co py.copy ( li1)
# Deepcopy für Deepcopy verwenden
li3
=
copy.deepcopy (li1)
Im obigen Code copy ()
gibt eine flache Kopie der Liste zurück, und deepcopy ()
gibt eine tiefe Kopie der Liste zurück.
deepcopy
Deep Copy — es ist ein Vorgang, bei dem der Kopiervorgang rekursiv abläuft. Das bedeutet, zuerst ein neues Sammlungsobjekt zu erstellen und es dann rekursiv mit Kopien der im Original gefundenen untergeordneten Objekte zu füllen. Bei einer tiefen Kopie wird eine Kopie eines Objekts auf ein anderes Objekt kopiert. Das bedeutet, dass alle Änderungen , die an der Kopie des Objekts vorgenommen wurden, nicht im Originalobjekt widergespiegelt werden. In Python geschieht dies mit der Funktion deepcopy () .
# Python-Code zur Demonstration von Kopiervorgängen
# import & quot; kopieren & quot; für Kopiervorgänge
import
copy
# Liste 1 initialisieren
li1
=
[
1
,
2
, [
3
,
5
],
4
]
# Verwendung von Deepcopy zum tiefen Kopieren
li2
=
copy.deepcopy (li1)
# ursprüngliche Listenelemente
print
(
"Die ursprünglichen Elemente vor dem tiefen Kopieren"
)
für
i
in
range
(
0
,
len
(li1)):
print
(li1 [i], end
=
" "
)
print
(
" "
)
# hinzufügen und zu neuer Liste hinzufügen
li2 [
2
] [
0
]
=
7
# Die Änderung wird in l2 widergespiegelt
print
(
"Die neue Liste der Elemente nach dem tiefen Kopieren "
)
for
i
in
Bereich
(
0
,
len
(li1)):
print
(li2 [i], end
=
""
)
p rint
(
""
)
# Änderung ist NICHT in der Originalliste widergespiegelt
# wie eine tiefe Kopie
print
(
"Die ursprünglichen Elemente nach dem tiefen Kopieren"
)
für
i
in
Bereich
(
0
,
len
(li1)):
print
(li1 [i], end
=
""
)
Exit:
Das ursprüngliche Element s vor dem tiefen Kopieren 1 2 [3, 5] 4 Die neue Liste der Elemente nach dem tiefen Kopieren 1 2 [7, 5] 4 Die ursprünglichen Elemente nach dem tiefen Kopieren 1 2 [3, 5] 4
In Im obigen Beispiel wirkte sich eine an der Liste vorgenommene Änderung nicht auf andere Listen aus, was auf eine Deep-Copy-Liste hinweist.
Shallow copy
Flache Kopie bedeutet, ein neues Sammlungsobjekt zu erstellen und es dann mit Verweisen auf gefundene untergeordnete Objekte zu füllen im Original. Der Kopiervorgang wiederholt sich nicht und erstellt daher keine Kopien der untergeordneten Objekte selbst. Bei einer flachen Kopie wird ein Verweis auf ein Objekt auf ein anderes Objekt kopiert. Das bedeutet, dass alle Änderungen , die an der Kopie des Objekts vorgenommen werden , im Originalobjekt wiedergegeben werden . Python tut dies mit der Funktion "copy () ".
|
Exit:
Die ursprünglichen Elemente vor dem flachen Kopieren 1 2 [3, 5] 4 Die ursprünglichen Elemente nach dem flachen Kopieren 1 2 [7, 5] 4
Im obigen Beispiel ist die an der Liste vorgenommene Änderung wirkte sich auf eine andere Liste aus, was darauf hinweist, dass die Liste kopiert wurde.
Wichtige Punkte:
Der Unterschied zwischen flachen und tiefen Kopien gilt nur für zusammengesetzte Objekte (Objekte, die enthalten andere Objekte, wie Listen oder Klasseninstanzen):
- Die flache Kopie erstellt ein neues zusammengesetztes Objekt und fügt dann (soweit möglich) Verweise auf Objekte ein, die im Original gefunden wurden.
- Eine tiefe Kopie erstellt ein neues zusammengesetztes Objekt und fügt dann rekursiv Kopien der im Original gefundenen Objekte ein.