Python Flache Kopie und tiefe Kopie
Kopieren Sie ein Objekt in Python
In Python verwenden wir den Operator =
, um eine Kopie eines Objekts zu erstellen. Sie können denken, dass dies ein neues Objekt erstellt; es tut es nicht. Es erstellt nur eine neue Variable, die die Referenz des ursprünglichen Objekts teilt.
Nehmen wir ein Beispiel, in dem wir eine Liste mit dem Namen old_list erstellen und einen Objektverweis mit dem Operator =
an new_list übergeben.,
Beispiel 1: Kopieren Sie mit = operator
Wenn wir das obige Programm ausführen, lautet die Ausgabe:
Old List: , , ]ID of Old List: 140673303268168New List: , , ]ID of New List: 140673303268168
Wie Sie aus der Ausgabe sehen können, haben sowohl die Variablen old_list als auch new_list dieselbe ID, dh 140673303268168
.
Wenn Sie also Werte in new_list oder old_list ändern möchten, ist die Änderung in beiden sichtbar.
Im Wesentlichen möchten Sie manchmal die ursprünglichen Werte unverändert lassen und nur die neuen Werte ändern oder umgekehrt., In Python gibt es zwei Möglichkeiten, Kopien zu erstellen:
- Shallow Copy
- Deep Copy
Damit diese Kopien funktionieren, verwenden wir das Modul copy
.
Kopiermodul
Wir verwenden das Modul copy
von Python für flache und tiefe Kopiervorgänge. Angenommen, Sie müssen die zusammengesetzte Liste kopieren, z. B. x. Beispiel:
import copycopy.copy(x)copy.deepcopy(x)
Hier gibt die copy()
eine flache Kopie von x zurück. In ähnlicher Weise gibt deepcopy()
eine tiefe Kopie von x.,
Flache Kopie
Eine flache Kopie erstellt ein neues Objekt, das die Referenz der ursprünglichen Elemente speichert.
Eine flache Kopie erstellt also keine Kopie verschachtelter Objekte, sondern kopiert nur die Referenz verschachtelter Objekte. Dies bedeutet, dass ein Kopiervorgang nicht wiederholt oder Kopien verschachtelter Objekte selbst erstellt.,
Beispiel 2: Erstellen Sie eine Kopie mit flacher Kopie
import copyold_list = , , ]new_list = copy.copy(old_list)print("Old list:", old_list)print("New list:", new_list)
Wenn wir das Programm ausführen , lautet die Ausgabe:
Old list: , , ]New list: , , ]
Im obigen Programm haben wir eine verschachtelte Liste erstellt und sie dann mit der Methode copy()
flach kopiert.
Dies bedeutet, dass ein neues und unabhängiges Objekt mit demselben Inhalt erstellt wird. Um dies zu überprüfen, drucken wir sowohl old_list als auch new_list.,
Um zu bestätigen, dass sich new_list von old_list unterscheidet, versuchen wir, dem Original ein neues verschachteltes Objekt hinzuzufügen und es zu überprüfen.
Beispiel 3: Hinzufügen zu old_list, mit flacher Kopie
Wenn wir das Programm ausführen, wird Folgendes ausgegeben:
Old list: , , , ]New list: , , ]
Im obigen Programm haben wir eine flache Kopie von old_list erstellt. Die new_list enthält Verweise auf ursprüngliche verschachtelte Objekte, die in old_list gespeichert sind. Dann fügen wir die neue Liste hinzu, dh in old_list., Diese neue Unterliste wurde nicht in new_list kopiert.
Wenn Sie jedoch verschachtelte Objekte in old_list ändern, werden die Änderungen in new_list angezeigt.
Beispiel 4: Hinzufügen eines neuen verschachtelten Objekts mithilfe einer flachen Kopie
import copyold_list = , , ]new_list = copy.copy(old_list)old_list = 'AA'print("Old list:", old_list)print("New list:", new_list)
Wenn wir das Programm ausführen, wird Folgendes ausgegeben:
Old list: , , ]New list: , , ]
Deep Copy
Eine tiefe Kopie erstellt ein neues Objekt und fügt rekursiv die Kopien verschachtelter Objekte hinzu, die in den ursprünglichen Elementen vorhanden sind.
Fahren wir mit Beispiel 2 fort., Wir werden jedoch eine tiefe Kopie mit der Funktion deepcopy()
erstellen, die im Modul copy
vorhanden ist. Die Deep Copy erstellt eine unabhängige Kopie des Originalobjekts und aller verschachtelten Objekte.
Beispiel 5: Kopieren einer Liste mit deepcopy ()
import copyold_list = , , ]new_list = copy.deepcopy(old_list)print("Old list:", old_list)print("New list:", new_list)
Wenn wir das Programm ausführen, wird Folgendes ausgegeben:
Old list: , , ]New list: , , ]
Im obigen Programm verwenden wir die Funktion deepcopy()
, um eine Kopie zu erstellen, die ähnlich aussieht.,
Wenn Sie jedoch Änderungen an verschachtelten Objekten im ursprünglichen Objekt old_list vornehmen,werden keine Änderungen an der Kopie new_list.
Beispiel 6: Hinzufügen eines neuen verschachtelten Objekts in der Liste mit Deep copy
Wenn wir das Programm ausführen, wird Folgendes ausgegeben:
Old list: , , ]New list: , , ]
Wenn wir old_list einen neuen Wert zuweisen, wird nur die old_list geändert. Dies bedeutet, dass sowohl die old_list als auch die new_list unabhängig sind. Dies liegt daran, dass die old_list rekursiv kopiert wurde, was für alle verschachtelten Objekte gilt.