In der Programmierwelt ist das Kopieren von Daten eine häufige Aufgabe. Allerdings sind nicht alle Kopien gleich. Zwei häufig vorkommende Begriffe sind Shallow Copy und Deep Copy. Es ist entscheidend, den Unterschied zwischen ihnen zu verstehen, um Fehler zu vermeiden, die schwer zu erkennen sein können.
Eine flache Kopie kopiert nur die erste Ebene eines Objekts und hinterlässt Verweise auf die Originaldaten auf tieferen Ebenen. Das bedeutet, dass, wenn das ursprüngliche Objekt andere Objekte enthält (verschachtelt), beim flachen Kopieren nur die Verweise auf diese Objekte kopiert werden, nicht die Objekte selbst.
const originalArray = [1, 2, [3, 4]]; const shallowCopy = originalArray.slice(); shallowCopy[2][0] = 99; console.log(originalArray); // [1, 2, [99, 4]] console.log(shallowCopy); // [1, 2, [99, 4]]
import copy original_list = [1, 2, [3, 4]] shallow_copy = copy.copy(original_list) shallow_copy[2][0] = 99 print(original_list) # [1, 2, [99, 4]] print(shallow_copy) # [1, 2, [99, 4]]
Eine flache Kopie ist nützlich, wenn Sie wissen, dass Sie verschachtelte Objekte nicht ändern müssen. Es ist schneller und verbraucht weniger Speicher als eine tiefe Kopie.
Wenn Sie in JavaScript Array.slice() oder Object.assign() verwenden, führen Sie eine flache Kopie durch!
Eine tiefe Kopie kopiert alle Ebenen eines Objekts und dupliziert sogar verschachtelte Strukturen. Dies bedeutet, dass an der Kopie vorgenommene Änderungen keine Auswirkungen auf das Originalobjekt haben.
const originalArray = [1, 2, [3, 4]]; const deepCopy = JSON.parse(JSON.stringify(originalArray)); deepCopy[2][0] = 99; console.log(originalArray); // [1, 2, [3, 4]] console.log(deepCopy); // [1, 2, [99, 4]]
import copy original_list = [1, 2, [3, 4]] deep_copy = copy.deepcopy(original_list) deep_copy[2][0] = 99 print(original_list) # [1, 2, [3, 4]] print(deep_copy) # [1, 2, [99, 4]]
Wenn Sie mit komplexen oder verschachtelten Datenstrukturen arbeiten, ist Deep Copy die sicherste Option, um unerwünschte Nebenwirkungen zu vermeiden.
In Python ist copy.deepcopy() Ihr Freund, wenn Sie komplexe Objekte sicher duplizieren müssen.
Hier ist ein direkter Vergleich zwischen flacher Kopie und tiefer Kopie:
Besonderheit | Flache Kopie | Deep Copy |
---|---|---|
Flache Kopie | Ja | NEIN |
Deep Copy | NEIN | Ja |
Änderungen am Originalobjekt wirken sich auf die Kopie aus | Ja | NEIN |
Komplexität | Niedrig | Hoch |
Denken Sie daran, dass eine flache Kopie schneller, eine tiefe Kopie jedoch sicherer ist, wenn Sie mit komplexen Objekten arbeiten.
Flache Kopien eignen sich hervorragend zum Duplizieren einfacher Anwendungseinstellungen oder temporärer Daten!
Ein häufiger Fehler besteht darin, bei der Verschachtelung von Daten eine flache Kopie anstelle einer tiefen Kopie zu verwenden. Dies kann zu unerwünschten Änderungen am Originalobjekt führen.
const originalArray = [1, 2, [3, 4]]; const shallowCopy = originalArray.slice(); shallowCopy[2][0] = 99; console.log(originalArray); // [1, 2, [99, 4]] (¡No esperado!)
Überprüfen Sie immer, ob Ihr Objekt verschachtelte Ebenen hat, bevor Sie sich zwischen einer flachen oder tiefen Kopie entscheiden.
const originalObject = { a: 1, b: { c: 2 } }; const shallowCopy = Object.assign({}, originalObject);
const originalArray = [1, 2, 3]; const shallowCopy = [...originalArray];
const originalObject = { a: 1, b: { c: 2 } }; const deepCopy = structuredClone(originalObject);
structuredClone() eignet sich perfekt zum Kopieren komplexer oder kreisförmiger Strukturen, ohne sich den Kopf zu zerbrechen.
const _ = require('lodash'); const originalObject = { a: 1, b: { c: 2 } }; const deepCopy = _.cloneDeep(originalObject);
import copy original_list = [1, 2, [3, 4]] shallow_copy = copy.copy(original_list) deep_copy = copy.deepcopy(original_list)
In Python reicht manchmal eine flache Kopie aus, um versehentliche Änderungen an Ihren Listen zu vermeiden!
Zusammenfassend lässt sich sagen, dass sowohl flache Kopien als auch tiefe Kopien ihren Nutzen haben. Der Schlüssel liegt darin, die Struktur der Daten, mit denen Sie arbeiten, zu verstehen und die geeignete Kopiermethode auszuwählen.
Ja, weil weniger Daten kopiert werden.
Ja, mit JSON.parse(JSON.stringify()) oder structureClone().
Das Originalobjekt wird ebenfalls betroffen sein.
Nicht unbedingt, nur wenn Sie mit komplexen Datenstrukturen arbeiten.
Es ist nativ, unterstützt zirkuläre Strukturen und ist effizienter als JSON.parse(JSON.stringify()) und ermöglicht darüber hinaus die vollständige Übertragung von Werten von einem Objekt auf ein anderes.
Fehler bei der Verwendung flacher statt tiefer Kopien kommen häufiger vor, als Sie denken! Ich hoffe, dieser kleine Leitfaden hilft Ihnen, Probleme beim Kopieren von Daten zu vermeiden.
Lassen Sie es mich in den Kommentaren wissen. Wussten Sie bereits von tiefen und flachen Kopien und hatten Sie jemals ein Problem damit?
Foto von Mohammad Rahmani auf Unsplash
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3