Une copie a deux niveaux. Presque tous n'en clonent qu'un.A copy has two levels. Almost all of them clone only one.
Au numéro précédent, la parade à l'aliasing était « copie avant de muter ». Bonne règle — mais elle rouvre aussitôt une question qu'on croyait réglée : quand tu écris list(grille), qu'est-ce qui est copié, au juste ? Le contenant, oui : tu obtiens une nouvelle liste, indépendante à son niveau. Mais ses éléments — ici les sous-listes — ne sont pas clonés : la copie pointe les mêmes objets internes que l'original. Copier n'est pas un geste atomique. C'est une profondeur, et par défaut cette profondeur vaut un.In the previous issue, the counter to aliasing was 'copy before you mutate'. Good rule — but it reopens a question we thought settled: when you write list(grille), what exactly gets copied? The container, yes: you get a new list, independent at its level. But its elements — here the sub-lists — aren't cloned: the copy points at the same inner objects as the original. Copying isn't an atomic act. It's a depth, and by default that depth is one.
grille = [[1, 2], [3, 4]] copie = list(grille) # « je copie la grille » — un nouveau contenant copie[0].append(99) # je ne touche « que » la copie print(grille) # [[1, 2, 99], [3, 4]] — l'original a changé aussi
grille et copie sont deux listes différentes — mais elles pointent les mêmes sous-listes. Muter une sous-liste par l'une se voit par l'autre. La copie a dédoublé le premier étage, pas le second.grille and copie are two different lists — but they point at the same sub-lists. Mutating a sub-list through one shows through the other. The copy duplicated the first floor, not the second.
Avant de te fier à une copie, demande : jusqu'où descend-elle ? Si tu ne mutes que le contenant (ajouter/retirer un élément), une copie de surface suffit. Si tu mutes ce qu'il y a dedans, la copie de surface est un abri en carton — l'original le sentira.Before trusting a copy, ask: how deep does it go? If you only mutate the container (add/remove an element), a shallow copy is enough. If you mutate what's inside, the shallow copy is a cardboard shelter — the original will feel it.
Le №04 a nommé l'aliasing : un objet, plusieurs noms. Ce numéro outille la parade — copier — et en montre la vraie forme : une profondeur à choisir. Le №06 refermera le volume sur le cas le plus piégeux de copie de surface, le slicing d'une grille.№04 named aliasing: one object, many names. This issue tools the counter — copying — and shows its true shape: a depth to choose. №06 will close the volume on the trickiest shallow-copy case, slicing a grid.