Copie superficielle ou copie approfondie : que sont-elles réellement ? - Exemples avec JavaScript et Python

王林
Libérer: 2024-08-29 06:33:01
original
167 Les gens l'ont consulté

Introduction

Dans le monde de la programmation, copier des données est une tâche courante. Cependant, toutes les copies ne sont pas égales. Deux termes qui apparaissent souvent sontcopie superficielleetcopie approfondie. Comprendre la différence entre eux est crucial pour éviter les erreurs qui peuvent être difficiles à détecter.

Qu'est-ce qu'une copie superficielle ?

Unecopie superficiellecopie uniquement le premier niveau d'un objet, laissant des références aux données d'origine à des niveaux plus profonds. Cela signifie que si l'objet d'origine contient d'autres objets (imbriqués), la copie superficielle copiera uniquement les références à ces objets, pas les objets eux-mêmes.

Exemple en JavaScript

rreee

Exemple en Python

rreee

Conseil:

Une copie superficielle est utile lorsque vous savez que vous n'avez pas besoin de modifier les objets imbriqués. C'est plus rapide et consomme moins de mémoire qu'une copie complète.

Note:

En JavaScript, si vous utilisez Array.slice() ou Object.assign(), vous faites une copie superficielle !

Qu'est-ce qu'une copie approfondie ?

Unecopie approfondiecopie tous les niveaux d'un objet, dupliquant même les structures imbriquées. Cela signifie que toute modification apportée à la copie n'affectera pas l'objet original.

Exemple en JavaScript

rreee

Exemple en Python

rreee

Conseil:

Si vous travaillez avec des structures de données complexes ou imbriquées, la copie approfondie est l'option la plus sûre pour éviter les effets secondaires indésirables.

Note:

En Python, copy.deepcopy() est votre ami lorsque vous devez dupliquer en toute sécurité des objets complexes.

Comparaison directe : copie superficielle et copie approfondie

Voici une comparaison directe entre la copie superficielle et la copie profonde :

Característica Shallow Copy Deep Copy
Copia superficial No
Copia profunda No
Modificaciones al objeto original afectan la copia No
Complejidad Baja Alta

Tip:

Recuerda, una shallow copy es más rápida, pero una deep copy es más segura cuando trabajas con objetos complejos.

Casos de Uso Comunes

Cuándo Usar Shallow Copy

  • Cuando trabajas con objetos o estructuras de datos simples.
  • Cuando necesitas mejorar el rendimiento y las modificaciones profundas no son un problema.
  • Ejemplos: Configuraciones de aplicaciones, duplicación de datos temporales.

Cuándo Usar Deep Copy

  • Cuando trabajas con estructuras de datos anidadas o complejas.
  • Cuando necesitas asegurarte de que los cambios en la copia no afecten el original.
  • Ejemplos: Manipulación de datos complejos, aplicaciones que requieren alta seguridad y consistencia.

Nota:

¡Las shallow copies son geniales para duplicar configuraciones de aplicaciones ligeras o datos temporales!

Problemas Comunes y Cómo Evitarlos

Problemas con Shallow Copy

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.

Ejemplo:

const originalArray = [1, 2, [3, 4]]; const shallowCopy = originalArray.slice(); shallowCopy[2][0] = 99; console.log(originalArray); // [1, 2, [99, 4]] (¡No esperado!)
Copier après la connexion

Tip:

Siempre verifica si tu objeto tiene niveles anidados antes de decidir entre una shallow o deep copy.

Herramientas y Funciones para Realizar Copias en JavaScript

Uso de Object.assign() para Shallow Copy

const originalObject = { a: 1, b: { c: 2 } }; const shallowCopy = Object.assign({}, originalObject);
Copier après la connexion

Uso de ...spread para Shallow Copy

const originalArray = [1, 2, 3]; const shallowCopy = [...originalArray];
Copier après la connexion

Uso de structuredClone() para Deep Copy

const originalObject = { a: 1, b: { c: 2 } }; const deepCopy = structuredClone(originalObject);
Copier après la connexion

Tip:

structuredClone() es perfecto para copiar estructuras complejas o circulares sin romper tu cabeza.

Uso de Librerías como Lodash para Deep Copy

const _ = require('lodash'); const originalObject = { a: 1, b: { c: 2 } }; const deepCopy = _.cloneDeep(originalObject);
Copier après la connexion

Herramientas y Funciones para Realizar Copias en Python

Uso del Módulo copy

import copy original_list = [1, 2, [3, 4]] shallow_copy = copy.copy(original_list) deep_copy = copy.deepcopy(original_list)
Copier après la connexion

Diferencias entre copy.copy() y copy.deepcopy()

  • copy.copy(): Shallow copy.
  • copy.deepcopy(): Deep copy.

Nota:

¡En Python, una copia superficial a veces es todo lo que necesitas para evitar cambios accidentales en tus listas!

Resumen y Conclusión

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.

FAQs

1. ¿Es shallow copy siempre más rápida que deep copy?

Sí, debido a que copia menos datos.

2. ¿Se puede hacer una deep copy sin librerías externas en JavaScript?

Sí, con JSON.parse(JSON.stringify()) o structuredClone().

3. ¿Qué sucede si intento modificar un objeto anidado en una shallow copy?

El objeto original también se verá afectado.

4. ¿Es mejor usar siempre deep copy para evitar problemas?

No necesariamente, solo cuando trabajas con estructuras de datos complejas.

5. ¿Qué ventajas tiene structuredClone() frente a otros métodos de deep copy en JavaScript?

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?


Shallow Copy vs Deep Copy - ¿Qué son realmente? - Ejemplos con JavaScript y Python

La libreta de BYXN ? | Substack

¡Mi libreta de apuntes pública! ???. Click to read La libreta de BYXN ?, a Substack publication. Launched 17 days ago.

Shallow Copy vs Deep Copy - ¿Qué son realmente? - Ejemplos con JavaScript y Pythonbhyxen.substack.com

Photo by Mohammad Rahmani on Unsplash

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:dev.to
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!