logo

Kopieren in Python (Deep Copy und Shallow Copy)

In Python Zuweisungsanweisungen kopieren keine Objekte, sondern erstellen Bindungen zwischen einem Ziel und einem Objekt. Wenn wir das verwenden = Operator, Es wird nur eine neue Variable erstellt, die die Referenz des ursprünglichen Objekts teilt. Um echte Kopien oder Klone dieser Objekte zu erstellen, können wir das Kopiermodul in verwenden Python .

Syntax von Python Deepcopy

Syntax: copy.deepcopy(x)



Syntax von Python Shallowcopy

Syntax: copy.copy(x)

Beispiel:

Um diese Kopien zu erstellen, verwenden wir das Kopiermodul. copy() gibt eine flache Kopie der Liste zurück und deepcopy() gibt eine tiefe Kopie der Liste zurück. Wie Sie sehen, haben beide den gleichen Wert, aber unterschiedliche IDs.

Beispiel: Dieser Code zeigt die Verwendung voncopy>Modul zum Erstellen sowohl flacher als auch tiefer Kopien einer verschachtelten Listeli1>. Eine flache Kopie,li2>, wird erstellt mit copy.copy()> , Beibehaltung der Struktur der obersten Ebene, aber gemeinsame Nutzung von Verweisen auf die inneren Listen. Eine tiefe Kopie,li3>, wird erstellt mit copy.deepcopy()> , was zu einer völlig unabhängigen Kopie von führtli1>, einschließlich aller verschachtelten Elemente. Der Code druckt die IDs und Werte vonli2>Undli3>, wobei der Unterschied zwischen flachen und tiefen Kopien im Hinblick auf Referenz und Unabhängigkeit hervorgehoben wird.



Python3






import> copy> li1>=> [>1>,>2>, [>3>,>5>],>4>]> li2>=> copy.copy(li1)> print>(>'li2 ID: '>,>id>(li2),>'Value: '>, li2)> li3>=> copy.deepcopy(li1)> print>(>'li3 ID: '>,>id>(li3),>'Value: '>, li3)>

>

>

Ausgabe:

  li2 ID:   2521878674624   Value:   [1, 2, [3, 5], 4]   li3 ID:   2521878676160   Value:   [1, 2, [3, 5], 4]>

Was ist Deep Copy in Python?

Bei einer tiefen Kopie wird ein neues zusammengesetztes Objekt erstellt, bevor Kopien der im Original gefundenen Elemente rekursiv darin eingefügt werden. Dies bedeutet, dass zunächst ein neues Sammlungsobjekt erstellt und dieses dann rekursiv mit Kopien der im Original gefundenen untergeordneten Objekte gefüllt wird. Beim Deep Copy wird eine Kopie des Objekts in ein anderes Objekt kopiert. Das bedeutet es irgendwelche Veränderungen eine Kopie des Objekts erstellt spiegeln sich nicht im Originalobjekt wider.

Tiefe Kopie in Python

Beispiel:

Im obigen Beispiel wurde die Änderung in der Liste vorgenommen hatte keinen Einfluss andere Listen, was darauf hinweist, dass die Liste stark kopiert wurde.

Dieser Code veranschaulicht das tiefe Kopieren einer Liste mit verschachtelten Elementen mithilfe voncopy>Modul. Es werden zunächst die Originalelemente von gedrucktli1>, und kopiert sie dann tief, um sie zu erstellenli2>. Eine Änderung an einem Element inli2>betrifft nichtli1>, wie die separaten Ausdrucke belegen. Dies verdeutlicht, wie durch tiefes Kopieren eine unabhängige Kopie erstellt wird und der Inhalt der ursprünglichen Liste auch nach Änderungen an der Kopie erhalten bleibt.

thread.destroy

Python3




import> copy> li1>=> [>1>,>2>, [>3>,>5>],>4>]> li2>=> copy.deepcopy(li1)> print> (>'The original elements before deep copying'>)> for> i>in> range>(>0>,>len>(li1)):> >print> (li1[i],end>=>' '>)> print>(>' '>)> li2[>2>][>0>]>=> 7> print> (>'The new list of elements after deep copying '>)> for> i>in> range>(>0>,>len>( li1)):> >print> (li2[i],end>=>' '>)> print>(>' '>)> print> (>'The original elements after deep copying'>)> for> i>in> range>(>0>,>len>( li1)):> >print> (li1[i],end>=>' '>)>

>

>

Ausgabe:

The original elements before deep copying 1 2 [3, 5] 4 The new list of elements after deep copying 1 2 [7, 5] 4 The original elements after deep copying 1 2 [3, 5] 4>

Was ist Shallow Copy in Python?

Eine flache Kopie erstellt ein neues zusammengesetztes Objekt und verweist dann auf die darin im Original enthaltenen Objekte. Das heißt, sie erstellt ein neues Sammlungsobjekt und füllt es dann mit Verweisen auf die im Original gefundenen untergeordneten Objekte. Der Kopiervorgang ist nicht rekursiv und erstellt daher keine Kopien der untergeordneten Objekte selbst. Beim flachen Kopieren wird eine Referenz eines Objekts in ein anderes Objekt kopiert. Das bedeutet es irgendwelche Veränderungen zu einer Kopie eines Objekts gemacht Reflektieren Sie im Originalobjekt. In Python wird dies mithilfe von implementiert Kopieren() Funktion.

Flache Kopie in Python

Beispiel:

In diesem Beispiel handelt es sich um die in der Liste vorgenommene Änderung hatte Einfluss eine andere Liste, was darauf hinweist, dass die Liste nur oberflächlich kopiert wurde. Wichtige Punkte: 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.

Beispiel: Dieser Code demonstriert das flache Kopieren einer Liste mit verschachtelten Elementen mithilfe von ' copy'> Modul. Zunächst werden die Originalelemente von gedrucktli1>, führt dann ein flaches Kopieren durchli2>. Ändern eines Elements inli2>wirkt sich auf das entsprechende Element in ausli1,>da beide Listen gemeinsame Verweise auf die inneren Listen haben. Dies zeigt, dass durch flaches Kopieren eine neue Liste erstellt wird, es jedoch keine vollständige Unabhängigkeit für verschachtelte Elemente bietet.

Python3




Java-Schalter

import> copy> li1>=> [>1>,>2>, [>3>,>5>],>4>]> li2>=> copy.copy(li1)> print> (>'The original elements before shallow copying'>)> for> i>in> range>(>0>,>len>(li1)):> >print> (li1[i],end>=>' '>)> print>(>' '>)> li2[>2>][>0>]>=> 7> print> (>'The original elements after shallow copying'>)> for> i>in> range>(>0>,>len>( li1)):> >print> (li1[i],end>=>' '>)>

>

>

Ausgabe:

The original elements before shallow copying 1 2 [3, 5] 4 The original elements after shallow copying 1 2 [7, 5] 4>

EMPFOHLENE ARTIKEL Unterschied zwischen flacher und tiefer Kopie einer Klasse