À retenir
- Ne dupliquez que le contenant, pas le contenu imbriqué.
- Économe en mémoire et très rapide à exécuter.
- Risque d'effets de bord si on modifie des données partagées.
Une copie superficielle consiste à créer une nouvelle structure (comme une liste ou un objet) qui contient des références vers les mêmes éléments que l'original. Imaginez que vous photocopiez un carnet d'adresses : vous avez un nouveau carnet, mais les numéros de téléphone à l'intérieur pointent toujours vers les mêmes personnes physiques.
Étymologie
Traduction du concept informatique anglais shallow copy. Le terme « superficielle » indique que l'opération ne traite que l'enveloppe visible (le premier niveau) de la donnée, sans s'occuper de dupliquer ce qui se trouve à l'intérieur des éléments imbriqués.
Exemples d'usage
- En JavaScript, utiliser l'opérateur de décomposition
[...maListe]crée une nouvelle liste, mais si les éléments sont des objets, ils restent partagés avec l'ancienne. - En Python, la méthode
liste.copy()génère une copie de surface.
Cas d'usage
On utilise la copie superficielle pour manipuler l'organisation d'une collection (trier, filtrer) sans consommer trop de mémoire, puisque les données volumineuses contenues à l'intérieur ne sont pas réellement dupliquées.
Bonnes pratiques
Il faut être extrêmement vigilant lorsque les données contiennent des sous-objets modifiables. Si vous modifiez un sous-élément dans la copie, l'original sera lui aussi impacté. Si vous avez besoin d'une isolation totale entre l'original et la copie, préférez une copie profonde.
Synonymes
Antonymes
Conseil
Pour débuter, retenez que la plupart des fonctions de copie standard dans les langages modernes (comme slice() en JS ou copy() en Python) sont superficielles par défaut. Testez toujours votre code en modifiant une propriété imbriquée pour vérifier le comportement.
Questions fréquentes
Pourquoi ma copie modifie-t-elle l'original ?
C'est le comportement typique d'une copie superficielle : les deux structures partagent les mêmes références vers les objets internes.
Quand l'utiliser ?
Quand vos données sont simples (nombres, textes) ou quand vous voulez volontairement partager les mêmes objets pour gagner en performance.