Un seul +=, deux gestes que rien dans le signe ne distingue.One +=, two moves nothing in the sign tells apart.
On tient le réflexe du premier numéro : un nom est une étiquette, pas une boîte. Reste une question que ce réflexe ne tranche pas encore — l'objet visé se laisse-t-il modifier, ou faut-il en fabriquer un neuf ? C'est la mutabilité, et elle n'est pas un détail : c'est une propriété du type, décidée bien avant ta ligne de code. L'opérateur += est l'endroit où elle mord le plus fort, parce qu'il porte les deux comportements sous le même symbole.You hold the first issue's reflex: a name is a label, not a box. One question that reflex doesn't settle yet — does the target object let itself be modified, or must a fresh one be made? That's mutability, and it's no detail: it's a property of the type, decided long before your line of code. The += operator is where it bites hardest, because it carries both behaviors under one symbol.
s = "ab" s += "c" # une NOUVELLE chaîne "abc" — s change de cible lst = [1] lst += [2] # la MÊME liste [1, 2] — mutée sur place # même opérateur, +=, deux gestes opposés selon le type
Un objet immuable ne peut pas changer de valeur : toute « modification » fabrique un objet neuf et recolle le nom. Un objet mutable se laisse changer en place — et tous les noms qui le désignent voient la différence.An immutable object cannot change value: any "modification" builds a fresh object and re-sticks the name. A mutable object lets itself be changed in place — and every name pointing to it sees the difference.
Avant d'écrire x += y, x.append(...) ou x[0] = ..., pose la question du type : cet objet est-il mutable ? Si oui, tu modifies une chose que d'autres noms peuvent tenir. Si non, tu n'as fait que déplacer une étiquette — l'ancien objet est intact, quelque part.Before writing x += y, x.append(...) or x[0] = ..., ask the type question: is this object mutable? If yes, you're modifying a thing other names may hold. If no, you only moved a label — the old object is untouched, somewhere.
Le № 01 a montré que l'assignation ne copie jamais — elle lie un nom. La suite logique : si l'objet visé est partagé, tout dépend de s'il se laisse muter. La mutabilité est la variable cachée de l'aliasing. On la nomme ici, avant de voir au Vol. II qui d'autre tient l'objet.Issue № 01 showed assignment never copies — it binds a name. The logical next step: if the target object is shared, everything hinges on whether it lets itself be mutated. Mutability is aliasing's hidden variable. We name it here, before Vol. II asks who else holds the object.