À retenir
- Crée une indépendance totale entre l'original et la copie.
- Duplique récursivement tous les sous-objets.
- Plus coûteuse en ressources qu'une copie superficielle.
Une copie profonde est une opération de duplication intégrale d'un objet ou d'une structure de données. Contrairement à une copie classique, elle ne se contente pas de copier la surface, mais recrée également tous les éléments imbriqués à l'intérieur. C'est un peu comme si, au lieu de simplement photocopier la couverture d'un classeur, on photocopiait également chaque page contenue à l'intérieur pour obtenir un second classeur totalement indépendant du premier.
Étymologie
Traduction directe de l'anglais deep copy. Le terme « profonde » fait référence à la capacité de l'algorithme à descendre dans les différents niveaux de hiérarchie d'un objet (la profondeur) pour en dupliquer chaque constituant, par opposition à une copie « superficielle » (shallow copy).
Exemples d'usage
- En JavaScript, utiliser
structuredClone()pour copier un objet complexe contenant d'autres objets sans que les modifications de l'un n'affectent l'autre. - En Python, l'utilisation de la fonction
copy.deepcopy()pour dupliquer une liste qui contient elle-même d'autres listes.
Cas d'usage
On utilise la copie profonde en programmation lorsqu'on veut manipuler des données complexes (objets, tableaux multidimensionnels) sans risquer de modifier par erreur les données originales. C'est crucial dans la gestion d'états (comme avec Redux en React) ou lorsqu'on travaille sur des algorithmes qui testent différentes versions d'un même jeu de données.
Bonnes pratiques
Attention à la performance : copier en profondeur des structures de données gigantesques consomme beaucoup de mémoire et de temps processeur. Il faut aussi être vigilant face aux références circulaires (un objet qui se pointe lui-même), car cela peut entraîner une boucle infinie lors de la copie si le langage ne le gère pas nativement.
Synonymes
Antonymes
Conseil
Quand vous débutez, privilégiez toujours la copie profonde si vous avez un doute sur la sécurité de vos données. Si vous remarquez que votre application ralentit, demandez-vous alors si une copie superficielle ou une autre méthode de gestion des données ne serait pas plus appropriée.
Questions fréquentes
Quelle est la différence avec une copie superficielle ?
La copie superficielle ne copie que les adresses (références) des objets internes, tandis que la copie profonde crée de nouveaux objets pour chaque élément.
Pourquoi ma copie profonde fait-elle planter mon programme ?
Cela arrive souvent si votre structure contient des boucles (références circulaires) que l'outil de copie ne sait pas gérer, provoquant un débordement de mémoire.