Vol. 1 — № 02
The Python Loop · KiosqueNewsstand
Blog  
Un atelier Python · Édition d'ApprentissageA Python Workshop · Learning Edition

Mutable ou immuable : pourquoi += ment Mutable or immutable: why += lies

Un seul opérateur, deux gestes opposés. x += 1 fabrique un nouvel objet et recolle l'étiquette ; lst += [1] mute la liste sur place. Le signe ne décide de rien — c'est le type de l'objet qui tranche. Et quand un tuple « immuable » contient une liste, la même ligne peut muter l'objet ET lever une exception dans la foulée. One operator, two opposite moves. x += 1 builds a new object and re-sticks the label; lst += [1] mutates the list in place. The sign decides nothing — the object's type does. And when an 'immutable' tuple holds a list, the same line can mutate the object AND raise an exception in one breath.

AudienceAudience
Dev qui tient déjà « un nom, un objet » et veut voir où la mutabilité mord Dev who already holds 'one name, one object' and wants to see where mutability bites
Format
Self-paced
ChapitresChapters
5
Date
Juil 2026 Jul 2026
≈ 18 min ●○○○ MutabilitéRéférencestuple

Chapitre 1 en accès libre — la suite (ch. 2 à 5) est réservée. Chapter 1 free to read — the rest (ch. 2–5) is members-only.

01CadrageFraming3 min

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.

Le même opérateur, deux issuesThe same operator, two outcomes
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
La frontière est dans le typeThe line runs through the type
Immuable · un neuf à chaque foisImmutable · a fresh one each time
intfloatboolstrbytestuplefrozensetNone
Mutable · modifié sur placeMutable · modified in place
listdictsetbytearrayla plupart des instances

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.

Le sous-réflexe du numéroThis issue's sub-reflex

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.

Pourquoi ce numéro suit le premier.Why this issue follows the first.

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.

🔒

La suite est réservée The rest is members-only

Le premier numéro est libre. Débloque tout The Python Loop — tous les volumes, à vie — pour 5 €, paiement unique. The first issue is free. Unlock all of The Python Loop — every volume, forever — for €5, one-time.

Retour au kiosqueBack to newsstand