5 Unterschied zwischen flacher und tiefer Kopie einer Klasse

Contents

Was ist eine flache Kopie?

Eine  flache Kopie  eines Objekts ist eine Kopie, deren Eigenschaften dieselben Referenzen verwenden (auf dieselben zugrunde liegenden Werte zeigen) wie die des Quellobjekts, aus dem die Kopie erstellt wurde.

Bei der flachen Kopie wird ein Objekt erstellt, indem einfach die Daten aller Variablen des ursprünglichen Objekts kopiert werden. Dies funktioniert gut, wenn keine der Variablen des Objekts im Heap-Abschnitt des Speichers definiert sind. Wenn einigen Variablen Speicher aus dem Heap-Abschnitt dynamisch zugewiesen wird, verweist die kopierte Objektvariable auch auf denselben Speicherort.

Dies führt zu Mehrdeutigkeit und Laufzeitfehlern bei hängenden Zeigern. Da beide Objekte auf denselben Speicherort verweisen, werden Änderungen, die von einem vorgenommen werden, diese Änderungen auch in einem anderen Objekt widerspiegeln. Da wir eine Nachbildung des Objekts erstellen wollten, wird dieser Zweck nicht durch Shallow copy erfüllt. 

Eigenschaften

  • Flache Kopie speichert die Referenz von Objekten auf die ursprüngliche Speicheradresse.
  • Flache Kopie ist schneller.
  • Flache Kopie spiegelt Änderungen wider, die am neuen/kopierten Objekt im Originalobjekt vorgenommen wurden.
  • Flache Kopie speichert die Kopie des ursprünglichen Objekts und zeigt die Referenzen auf die Objekte.
  • Flache Kopie ist weniger teuer.  

Was ist DeepCopy?

Eine tiefe Kopie eines Objekts ist eine Kopie, deren Eigenschaften nicht die gleichen Verweise (auf die gleichen zugrunde liegenden Werte zeigen) wie die des Quellobjekts aufweisen, aus dem die Kopie erstellt wurde. Deep Copy wird in Szenarien verwendet, in denen eine neue Kopie (Klon) ohne Bezug auf Originaldaten erstellt wird.

Wenn Sie also entweder die Quelle oder die Kopie ändern, können Sie sicher sein, dass Sie nicht auch das andere Objekt ändern; Das heißt, Sie werden nicht unbeabsichtigt Änderungen an der Quelle oder Kopie verursachen, die Sie nicht erwarten. Dieses Verhalten steht im Gegensatz zum Verhalten einer flachen Kopie, bei der Änderungen an entweder der Quelle oder der Kopie auch dazu führen können, dass sich das andere Objekt ändert (weil die beiden Objekte dieselben Referenzen verwenden).

Deep Copy kann anhand eines Beispiels veranschaulicht werden, indem ein Employee-Objekt mit AddressInfo als Mitglied des Referenztyps zusammen mit anderen Mitgliedern des Werttyps betrachtet wird. Eine tiefe Kopie von Employee erstellt ein neues Objekt, Employee2, mit Elementen vom Werttyp gleich Employee, verweist aber auf ein neues Objekt, AddressInfo2 , das eine Kopie von AddressInfo ist.

Eigenschaften

  • Deep Copy speichert Kopien des Objektwerts.
  • Deep Copy ist vergleichsweise langsamer.
  • Deep Copy spiegelt keine Änderungen wider, die am neuen/kopierten Objekt im ursprünglichen Objekt vorgenommen wurden.
  • Deep Copy speichert die Kopie des Originalobjekts und kopiert rekursiv auch die Objekte.
  • Tiefes Kopieren ist teuer im Vergleich zu flachem Kopieren im Hinblick auf die Objekterzeugung, da es rekursives Kopieren von Daten von anderen veränderlichen Objekten beinhaltet, die Teil des ursprünglichen Objekts sind.

Unterschied zwischen flacher und tiefer Kopie einer Klasse

GRUNDLAGE DES VERGLEICHS  FLACHES KOPIETIEFE KOPIE
Geklonte ObjekteGeklontes Objekt und Originalobjekt sind nicht 100 % disjunkt.Geklontes Objekt und Originalobjekt sind zu 100 % disjunkt.
ÄnderungenAlle Änderungen, die am geklonten Objekt vorgenommen werden, werden im Originalobjekt widergespiegelt oder umgekehrt.Alle Änderungen, die am geklonten Objekt vorgenommen werden, werden nicht im Originalobjekt widergespiegelt oder umgekehrt.
Objekt erstellenDie Standardversion der Klonmethode erstellt die flache Kopie eines Objekts.Um die tiefe Kopie eines Objekts zu erstellen, müssen Sie die Klonmethode überschreiben.
PräferenzEine flache Kopie wird bevorzugt, wenn ein Objekt nur primitive Felder hat.Deep Copy wird bevorzugt, wenn ein Objekt Verweise auf andere Objekte als Felder hat.
Geschwindigkeit  Flache Kopie ist schneller.Deep Copy ist langsam.
Bequemlichkeit  Es ist weniger teuer.Es ist sehr teuer.

Fazit

Deep Copy unterscheidet sich von Shallow Copy in der Art und Weise, in der die Verweistypmitglieder des Objekts kopiert werden. Beim Kopieren der Feldmitglieder des Werttyps wird in beiden Fällen eine Bit-für-Bit-Kopie des Felds durchgeführt. Beim Kopieren von Feldern des Referenztyps wird bei der flachen Kopie nur die Referenz kopiert, während bei der tiefen Kopie eine neue Kopie des referenzierten Objekts erstellt wird.

osky