Einführung

In diesem Tutorial werden wir flache Kopien vs tiefe Kopien mit Hilfe von Beispielen in Python diskutieren. Wir werden die Definition einer tiefen und flachen Kopie zusammen mit ihrer Implementierung in der Python-Sprache behandeln, um die Hauptunterschiede zwischen den beiden Kopiertypen zu bewerten.

In vielen der Programme, die wir schreiben, müssen wir, egal wie grundlegend sie sind, aus einem von vielen Gründen, wie der Recheneffizienz, eine Liste oder ein Objekt kopieren., Es gibt zwei Möglichkeiten, dies zu tun, entweder eine tiefe Kopie oder eine flache Kopie zu erstellen. Bevor wir die Unterschiede zwischen den beiden besprechen, wollen wir zuerst verstehen, was tiefe und flache Kopien genau sind.

Deep Copies in Python

Eine Deep copy erstellt eine neue und separate Kopie eines gesamten Objekts oder einer Liste mit einer eigenen eindeutigen Speicheradresse. Dies bedeutet, dass alle Änderungen, die Sie an der neuen Kopie des Objekts/der Liste vornehmen, nicht im Original wiedergegeben werden. Dieser Vorgang erfolgt, indem zuerst eine neue Liste oder ein neues Objekt erstellt und anschließend die Elemente rekursiv von der ursprünglichen in die neue kopiert werden.,

Kurz gesagt, beide Objekte sind völlig unabhängig voneinander. Dies ähnelt dem Konzept der Wertübergabe in Sprachen wie C++, Java und C#.

Deep Copy Example

Um das Konzept der Deep copies in Python zu implementieren, verwenden wir das copy Modul.

Angenommen, wir haben eine Liste von Listen mit dem Namen result_A, die die Noten von Schüler A in 3 Fächern für die ersten zwei Schuljahre enthält.und wir möchten auch eine genau ähnliche Ergebnisliste für Schüler B erstellen., Wir werden versuchen, eine tiefe Kopie der result_A – Liste zu erstellen und später einige Änderungen an dieser tiefen Kopie vorzunehmen, um die Noten von Schüler B anzuzeigen.

Beispiel 1:

Im obigen Skript verwenden wir die deepcopy – Methode aus der copy – Modul zum Kopieren der Liste result_A zu result_B. Als nächstes drucken wir den Inhalt beider Listen auf dem Bildschirm.

Ausgabe:

, ], ]

Wie Sie sehen können, sind die Listen identisch. Später in diesem Artikel werden wir sehen, wie sich dies von flachen Kopien unterscheidet.,

Flache Kopien in Python

Eine flache Kopie erstellt auch ein separates neues Objektobjekt oder eine separate Liste, aber anstatt die untergeordneten Elemente in das neue Objekt zu kopieren, werden einfach die Verweise auf ihre Speicheradressen kopiert. Wenn Sie also das ursprüngliche Objekt ändern, wird es im kopierten Objekt reflektiert und umgekehrt. Kurz gesagt, beide Kopien sind voneinander abhängig. Dies ähnelt dem Konzept der Referenzübergabe in Programmiersprachen wie C++, C# und Java.,

Beispiel kopieren

Um dies in Python zu implementieren, verwenden wir erneut das Modul copy, aber dieses Mal rufen wir die Funktion copy auf.

Verwenden wir dieselbe Beispielliste auch für das Beispiel für flache Kopien.

Beispiel 2:

# Program 2 - Shallow Copyimport copyresult_A = , ]result_B = copy.copy(result_A)print(result_A)print(result_B)

Im obigen Skript verwenden wir die copy – Methode aus dem copy – Modul, um eine flache Kopie der Liste result_A zu erstellen, die wir result_Bnannten., Als nächstes wurde der Inhalt beider Listen auf der Konsole gedruckt.

Ausgabe:

, ], ]

Auch hier sind die Listen wie erwartet gleich. Als nächstes erklären wir den Unterschied zwischen den Ergebnissen, die wir aus den Funktionen copy und deepcopy erhalten.

Unterschied zwischen tiefen und flachen Kopien

Nachdem wir nun besprochen haben, was flache und tiefe Kopien sind und warum wir Kopien erstellen, ist es an der Zeit, über den Unterschied zwischen ihnen zu sprechen., Im Wesentlichen gibt es nur zwei Kernunterschiede, die miteinander verknüpft sind:

  1. Deep copy speichert Kopien der Werte eines Objekts, während shallow copy keine Verweise auf die ursprüngliche Speicheradresse
  2. Deep copy spiegelt keine Änderungen wider, die am neuen/kopierten Objekt im ursprünglichen Objekt vorgenommen wurden.während shallow copy

Bevor wir mit der Implementierung fortfahren, möchten wir uns dieses Szenario vorstellen. Nehmen wir an, zwei Leute möchten ein Getränk teilen; Sie haben zwei leere Gläser und zwei Strohhalme., Sie können dieses Getränk auf zwei Arten teilen:

  1. Legen Sie das Getränk in ein Glas und legen Sie beide Strohhalme in dieses Glas, um es zu teilen
  2. Stellen Sie das Getränk in beide Gläser und legen Sie einen Strohhalm in jedes Glas

Das erste Szenario ist das einer flachen Kopie. Beide Variablen / Instanzen zeigen / verwenden denselben Speicherort für ihre Operationen. Das zweite Szenario ist das einer tiefen Kopie. Beide Variablen / Instanzen zeigen auf / verwenden zwei verschiedene Speicherorte für ihre Operationen.,

Vergleichsbeispiel

Um den Unterschied deutlich zu machen, verwenden wir diese Informationen in unseren beiden obigen Beispielen, beginnend mit Beispiel 1.

Oben haben wir die Liste result_A erstellt und eine tiefe Kopie mit dem Namen result_Berstellt. Versuchen wir, den Inhalt in result_B zu ändern und festzustellen, ob er Auswirkungen auf den Inhalt von result_Ahat.

Ausgabe:

Original List:, ]Deep Copy:, ]

Das erwartete Ergebnis ist, dass die ursprüngliche Liste bleibt unverändert., Und wie Sie sehen, haben Änderungen in der Deep Copy die ursprüngliche Liste nicht beeinflusst.

Versuchen wir nun dasselbe mit Beispiel 2-Flacher Kopie.

Ausgabe:

Original List:, ]Shallow Copy:, ]

Hier wird erwartet, dass sowohl die ursprüngliche Liste als auch die kopierte Liste nach der einzelnen Änderung geändert werden. Und wie Sie sehen, führte die Änderung der flachen Kopie dazu, dass diese Änderung auch in der ursprünglichen Liste angezeigt wurde.

Fazit

In diesem Beitrag haben wir darüber gesprochen, was eine flache und eine tiefe Kopie ist und wie wir sie mit dem Modul „Kopieren“ in Python-Sprache erstellen können., Wir haben zwei seiner Funktionen verwendet, dh copy und deepcopy, um flache bzw. tiefe Kopien zu erstellen. Darüber hinaus haben wir die beiden Hauptunterschiede zwischen einer flachen und einer tiefen Kopie diskutiert und auch eine flache und tiefe Kopie in Python implementiert, um diese Unterschiede besser zu verstehen.