Variables en folie
Dans un script simple ou chaque variable est assignée une seule fois à une valeur, il est facile de savoir quelle variable contient quelle valeur. Mais parfois la situation se complique.
Variable = Variable
Il est possible d'assigner une variable à une autre variable. Dans ce cas, la valeur de la variable de droite est copiée dans la variable de gauche. Cela signifie que les deux variables ont la même valeur, mais elles ne sont pas liées. Vous avez deux boîtes, qui contiennent la même chose, mais qui sont indépendantes l'une de l'autre.
Par exemple :
a = 10
b = a # Le contenu de 'a' est copié dans 'b'
print(a) # 10
print(b) # 10
a = 20 # Modifier la boîte 'a' ne change pas la boîte 'b'
print(a) # 20
print(b) # 10
Valeurs mutables
Certaines valeurs en programmation sont dites mutables, c'est-à-dire qu'elles peuvent être modifiées. Par exemple, les listes en Python sont mutables. Vous pouvez ajouter des éléments à une liste, supprimer des éléments ou modifier des éléments et cela reste la même liste. Par exemple :
ma_liste = [1, 2, 3]
print(ma_liste) # [1, 2, 3]
ma_liste[0] = 10 # Modifier le premier élément de la liste
ma_liste.append(4) # Ajouter un élément à la fin de la liste
print(ma_liste) # [10, 2, 3, 4]
Dans l'exemple ci-haut, la variable ma_liste
contient toujours la même liste, mais
nous avons modifié le contenu de la liste. Bref, vous pouvez mettre dans une boîte un objet
modifiable, mais c'est toujours et encore une boîte.
Là où ça devient intéressant, c'est que si vous assignez une variable à une autre variable et que le contenu de la variable est mutable, alors les deux variables pointent vers le même objet mutable.
a = [1, 2, 3]
b = a # On copie la référence vers la liste [1, 2, 3]
print(a) # [1, 2, 3]
print(b) # [1, 2, 3]
a[0] = 10 # Modifier le premier élément de la liste 'a'
b.append(4) # Ajouter un élément à la fin de la liste 'b'
print(a) # [10, 2, 3, 4]
print(b) # [10, 2, 3, 4]
Le concept clé ici est que lorsqu'on assigne une valeur mutable à une variable, en réalité on met
dans la boîte une référence vers cet objet mutable. Donc quand vous faites b = a
, vous
avez bel et bien une copie, mais une copie de la référence et non de la valeur référencée.
Exemple de valeurs immuables et mutables
- Immuables :
int
,float
,str
,tuple
,bool
- Mutables :
list
,dict
,set
Testez votre compréhension
🤔 Testez votre compréhension
- Q1
- Q2
- Q3
- Q4
- Q5
- Q6
Quelle est la valeur de b
après l'exécution du code suivant ?
a = [1, 2, 3]
b = a
a[0] = 10
Quelle est la valeur de b
après l'exécution du code suivant ?
a = "bonjour"
b = a
a = "salut"
Quelle est la valeur de b
après ce code ?
a = 5
b = a
a = a + 1
Quelle est la valeur de a
?
a = [4, 5]
b = a
b.append(6)
Quelle est la valeur de b
?
a = (1, 2)
b = a
a = (3, 4)
Quelle est la valeur de b
après l'exécution du code suivant ? Vous n'avez pas encore vu
la méthode copy()
, mais vous pouvez deviner ce qu'elle fait.
a = [7, 8]
b = a.copy()
a[0] = 9