Un signe égal — = — et deux noms sur un objet. Qui le mute ?One equals sign — = — and two names on one object. Who mutates it?
Quatre lignes que tout le monde écrit le premier jour. Le programme tourne, n'affiche pas ce qu'on attend, et pourtant rien n'a planté. Ce n'est pas un bug de append : c'est le modèle objet entier de Python qui tient dans un seul =. Assigner un nom est trivial ; comprendre ce que le nom désigne est tout le sujet.Four lines everyone writes on day one. The program runs, prints not what you expected, and yet nothing crashed. It's no append bug: it's all of Python's object model fitting inside a single =. Binding a name is trivial; understanding what the name points to is the whole point.
a = [1, 2, 3] b = a # on croit copier la liste b.append(4) # on ne touche « que » b print(a) # [1, 2, 3, 4] — a a changé aussi
Le = n'a pas dupliqué la liste : il a collé un second nom sur le même objet. b.append(4) mute cet objet — et a, qui le désigne aussi, « voit » la mutation.The = didn't duplicate the list: it stuck a second name onto the same object. b.append(4) mutates that object — and a, which points to it too, "sees" the mutation.
« a = b copie-t-il, ou lie-t-il un second nom au même objet ? » En Python, l'assignation ne copie jamais l'objet. Elle lie un nom. Tant que tu vois une variable comme une boîte qui contient une valeur, la mutation partagée restera une magie noire."Does a = b copy, or bind a second name to the same object?" In Python, assignment never copies the object. It binds a name. As long as you see a variable as a box that holds a value, shared mutation will stay black magic.
Tout le reste du modèle objet de Python — aliasing, copies, mutabilité, arguments par défaut, closures — est une conséquence de cette phrase. On ne commence pas par la syntaxe des classes : on commence par un = qui ne copie rien. Comprends ce qu'un nom désigne, et Python cesse d'être une loterie d'effets de bord.Everything else in Python's object model — aliasing, copies, mutability, default arguments, closures — follows from this one sentence. We don't start with class syntax: we start with an = that copies nothing. Understand what a name points to, and Python stops being a lottery of side effects.