Heim > Artikel > Backend-Entwicklung > Shallow Copy vs. Deep Copy – Was ist das wirklich? - Beispiele mit JavaScript und Python
In der Welt der Programmierung 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 Deep Copy kopiert alle Ebenen eines Objekts und dupliziert dabei sogar verschachtelte Strukturen. Das bedeutet, dass an der Kopie vorgenommene Änderungen keinen Einfluss 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 flachem Kopieren und tiefem Kopieren:
Característica | Shallow Copy | Deep Copy |
---|---|---|
Copia superficial | Sí | No |
Copia profunda | No | Sí |
Modificaciones al objeto original afectan la copia | Sí | No |
Complejidad | Baja | Alta |
Recuerda, una shallow copy es más rápida, pero una deep copy es más segura cuando trabajas con objetos complejos.
¡Las shallow copies son geniales para duplicar configuraciones de aplicaciones ligeras o datos temporales!
Un error común es usar una shallow copy en lugar de una deep copy cuando los datos son anidados. Esto puede llevar a modificaciones no deseadas en el objeto original.
const originalArray = [1, 2, [3, 4]]; const shallowCopy = originalArray.slice(); shallowCopy[2][0] = 99; console.log(originalArray); // [1, 2, [99, 4]] (¡No esperado!)
Siempre verifica si tu objeto tiene niveles anidados antes de decidir entre una shallow o deep copy.
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() es perfecto para copiar estructuras complejas o circulares sin romper tu cabeza.
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)
¡En Python, una copia superficial a veces es todo lo que necesitas para evitar cambios accidentales en tus listas!
En resumen, tanto las shallow copies como las deep copies tienen sus usos. La clave es entender la estructura de los datos con los que estás trabajando y elegir el método de copia adecuado.
Sí, debido a que copia menos datos.
Sí, con JSON.parse(JSON.stringify()) o structuredClone().
El objeto original también se verá afectado.
No necesariamente, solo cuando trabajas con estructuras de datos complejas.
Es nativo, soporta estructuras circulares y es más eficiente que JSON.parse(JSON.stringify()), además de que permite transferir por completo los valores de un objeto a otro.
¡Los errores al usar copias superficiales en lugar de profundas son más comunes de lo que piensas! Espero que esta pequeña guía te ayude a evitar cualquier problema a la hora de copiar datos.
Déjame saber en los comentarios, ¿ya conocías las deep y shallow copies y has tenido problema alguna vez debido a ellas?
Photo by Mohammad Rahmani on Unsplash
Das obige ist der detaillierte Inhalt vonShallow Copy vs. Deep Copy – Was ist das wirklich? - Beispiele mit JavaScript und Python. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!