Affectation d’une variable en Python: comment ça marche?

Affectation d’une variable en Python: comment ça marche?

Affectation d’une variable en Python: comment ça marche? Une fois n’est pas coutume, je vais mettre les mains dans le cambouis et sortir de l’aspect théorique de la programmation pour border l’aspect pratique.

Vous pouvez voir cet article en complément des ressources Python pour le lycée proposées sur ce site.

Affectation d’une variable en Python : cas simples

Une première affectation d’une variable

Prenons l’exemple trivial suivant:

a = 3

Python va créer un espace mémoire dans lequel il va stocker la valeur “3”. À ce niveau Python aura deviné que l’objet qu’il stocke en mémoire est de type entier (int) et va lui allouer un espace mémoire en conséquence (ça serait bien con de réserver trop d’espace mémoire pour un ch’ti entier non?). On dit que Python est un langage au typage dynamique.

Ensuite, il va créer un lien entre cet espace mémoire et le nom “a”.

Une seconde affectation

Considérons maintenant les lignes suivantes:

a = 3
a = 2

La ligne 1 va créer un espace mémoire dans lequel est mis l’entier “3”, puis un lien entre le nom de la variable et cet espace.

La ligne 2 va créer un second espace mémoire dans lequel est stocké l’entier “2”, puis détruire le lien qu’il y avait auparavant pour en créer un autre qui lie le nom de la variable et le second espace mémoire.

Qu’advient-il du premier espace mémoire ? Et bien Python peut le supprimer comme le garder.

Trois affectations

Allons plus loin et considérons le script suivant:

a = 3
a = 2
b = a

Nous avons vu ce qui se passait pour les lignes 1 et 2.

La ligne 3, quant à elle, va créer un lien entre le nom de la variable “b” et l’espace mémoire dans lequel est stocké l’entier “2”.

affectation variable python

Deux affectations d’une même valeur

Considérons le script suivant:

a = 3
b = 3

Là, Python peut se comporter de deux manières différentes :

  • la première possibilité est qu’il crée un espace mémoire dans lequel il stocke l’entier “3”, puis qu’il crée deux liens : l’un pour “a”, l’autre pour “b”;
  • la seconde possibilité est qu’il crée deux espaces mémoires distincts dans lesquels il stocke le même entier “3”, puis qu’il crée deux liens : l’un pour “a” (vers le premier espace mémoire), l’autre pour “b” (vers le second espace).

Affectation d’une variable en Python: cas des listes

Premier exemple basique d’une affectation d’une variable en Python dans le cas des listes

L = [ 1 , 2 ]

Dans ce cas, Python crée deux espaces mémoires dans lesquels il stocke respectivement les entiers “1” et “2”, puis il crée dans la mémoire un espace dans lequel il stocke une liste de deux éléments: le premier élément de cette liste va être relié au premier espace mémoire (qui contient “1”) et le second va être relié au second espace mémoire (contenant “2”).

Pour en savoir plus sur les types de variables, vous pouvez consulter par exemple ce cours de openclassrooms.

Un lien sera ensuite créé entre le nom “L” est l’espace mémoire alloué à la liste.

Deux listes liées

L = [ 1 , 2 ]
M = L
M[0] = 7
M = M.append(8)

Nous avons vu précédemment ce qui se passait pour la ligne 1.

À la ligne 2, Python crée un lien entre le nom “M” et l’espace mémoire alloué à la liste déjà créée. Ainsi, à la ligne 3, un espace mémoire se crée dans lequel est mis l’entier “7”, puis le lien déjà existant du premier élément de la liste créée en ligne 1 va être rompu et remplacé par un nouveau lien pointant vers l’espace mémoire contenant “7”.

affectation variable python

On remarque alors que la substitution faite dans la liste M a aussi un impact sur la liste L. C’est la raison pour laquelle il ne faut surtout pas copier une liste dans une autre en utilisant l’opérateur “=”.

Intéressons-nous maintenant à la ligne 4, qui ajoute à la liste M la valeur 4. Ici, un espace mémoire est créé dans lequel Python stocke l’entier “8”. Puis l’espace mémoire alloué à la liste sera modifié pour contenir un élément de plus. Cet élément qui va pointer sur l’espace mémoire contenant “8”:

affectation variable python

Différence entre append(8) et +[8]

Il existe une autre syntaxe pour ajouter un élément à une liste :

M += [ 8 ]

Que se passe-t-il dans ce cas ? Un espace mémoire est créé dans lequel l’entier “8” est stocké (comme précédemment). Mais un autre espace mémoire est créé pour stocker une liste de 3 éléments: les deux éléments de M déjà mentionnés précédemment, et celui que l’on ajoute.

affectation variable python

Cette syntaxe demande donc plus de mémoire que la méthode append().

Stéphane Pasquet
Stéphane Pasquet

Laissez votre message