Complément - niveau basique¶
Les chaînes sont des objets immuables¶
Voici un exemple d’un fragment de code qui illustre le caractère immuable des chaînes de caractères. Nous l’exécutons sous pythontutor, afin de bien illustrer les relations entre variables et objets.
# il vous faut charger cette cellule
# pour pouvoir utiliser les suivantes
%load_ext ipythontutorNote : une fois que vous avez évalué la cellule avec %%ipythontutor, vous devez cliquer sur le bouton Next pour voir pas à pas le comportement du programme.
Le scénario est très simple, on crée deux variables s1 et s2 vers le même objet 'abc', puis on fait une opération += sur la variable s1.
Comme l’objet est une chaîne, il est donc immuable, on ne peut pas modifier l’objet directement ; pour obtenir l’effet recherché (à savoir que s1 s’allonge de 'def'), Python crée un deuxième objet, comme on le voit bien sous pythontutor :
%%ipythontutor heapPrimitives=true
# deux variables vers le même objet
s1 = 'abc'
s2 = s1
# on essaie de modifier l'objet
s1 += 'def'
# pensez à cliquer sur `Next`# à se stade avec des chaines on observe
s1 = 'abc'
s2 = s1
s1 += 'def'
print(s1)
print(s2)abcdef
abc
Les listes sont des objets mutables¶
Voici ce qu’on obtient par contraste pour le même scénario mais qui cette fois utilise des listes, qui sont des objets mutables :
%%ipythontutor heapPrimitives=true ratio=0.8
# deux variables vers le même objet
liste1 = ['a', 'b', 'c']
liste2 = liste1
# on modifie l'objet
liste1 += ['d', 'e', 'f']
# pensez à cliquer sur `Next`# alors qu'avec les listes on observe
liste1 = ['a', 'b', 'c']
liste2 = liste1
# on modifie l'objet
liste1 += ['d', 'e', 'f']
print(liste1)
print(liste2)['a', 'b', 'c', 'd', 'e', 'f']
['a', 'b', 'c', 'd', 'e', 'f']
Conclusion¶
Ce comportement n’est pas propre à l’usage de l’opérateur +=, les objets mutables et immuables ont par essence un comportement différent, il est très important d’avoir ceci présent à l’esprit.
Nous aurons notamment l’occasion d’approfondir cela dans la séquence consacrée aux références partagées, en semaine 3.