je lis un bouquin de Python, ça a l'air surpuissant ce langage, tout existe déjà dans la bibliothèque standard, ya plus rien à faire. Oui, quand on vient de l'asm ou du C, ça change

Bon, par contre, je découvre un truc qui me laisse pantois :
>>> fable = ['Je','plie','mais','ne','romps','point']
>>> phrase = fable
>>> fable[4] ='casse'
>>> phrase
['Je', 'plie', 'mais', 'ne', 'casse', 'point']
J'aurais cru à un mécanisme de copy on write, comme en C++, mais il n'en est rien. Alors c'est quoi, une variable Python, faut la lire comment ? Comme une référence, comme un pointeur ? Pas comme une variable locale dont la valeur est sur la pile en tout cas.
Je sais pas trop à quoi me raccrocher, dans ce que je connais déjà, mais j'ai l'impression que ce genre de trucs est bien casse-gueule.
Pourtant, je lisais ce matin ceci : https://docs.python.org/3/reference/datamodel.html#objects-values-and-types
Types affect almost all aspects of object behavior. Even the importance of object identity is affected in some sense: for immutable types, operations that compute new values may actually return a reference to any existing object with the same type and value, while for mutable objects this is not allowed. E.g., after a = 1; b = 1, a and b may or may not refer to the same object with the value one, depending on the implementation, but after c = []; d = [], c and d are guaranteed to refer to two different, unique, newly created empty lists. (Note that c = d = [] assigns the same object to both c and d.)
Donc j'aurais jamais immaginé ce comportement.
Question subsidiaire, comme faire pour forcer une vraie copie ? Mon bouquin n'en parle pas encore au stade où j'en suis. ><
J'imagine que tous les objets disposent d'une méthode identique pour ça ?
Merci d'avance.
