Fermer2
FarewellLe 28/02/2015 à 14:57
yop,

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 grin

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. smile