Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

Licence CC BY-NC-ND Thierry Parmentelat & Arnaud Legout Inria - UCA

Complément - niveau basique

Nous avons déjà parlé de l’affectation par sequence unpacking (en Semaine 3, séquence “Les tuples”), qui consiste à affecter à plusieurs variables des “morceaux” d’un objet, comme dans :

x, y = ['spam', 'egg']

Dans ce complément nous allons voir une autre forme de l’affectation, qui consiste à affecter le même objet à plusieurs variables. Commençons par un exemple simple :

a = b = 1
print('a', a, 'b', b)
a 1 b 1

La raison pour laquelle nous abordons cette construction maintenant est qu’elle a une forte relation avec les références partagées ; pour bien le voir, nous allons utiliser une valeur mutable comme valeur à affecter :

# on affecte a et b au même objet liste vide
a = b = []

Dès lors nous sommes dans le cas typique d’une référence partagée ; une modification de a va se répercuter sur b puisque ces deux variables désignent le même objet :

a.append(1)
print('a', a, 'b', b)
a [1] b [1]

Ceci est à mettre en contraste avec plusieurs affectations séparées :

# si on utilise deux affectations différentes
a = []
b = []

# alors on peut changer a sans changer b
a.append(1)
print('a', a, 'b', b)
a [1] b []

On voit que dans ce cas chaque affectation crée une liste vide différente, et les deux variables ne partagent plus de donnée.

D’une manière générale, utiliser l’affectation simultanée vers un objet mutable crée mécaniquement des références partagées, aussi vérifiez bien dans ce cas que c’est votre intention.