Portée des variables☘
Une variable présente dans le texte d'un programme n'est pas nécessairement accessible partout.
Dans ce chapitre, nous illustrerons ce principe au travers des notions déjà abordées jusqu'à présent, à savoir :
- L'affectation de variable ;
- Les variables globales et les variables locales ;
- Les types muables et immuables ;
- Les effets de bord des fonctions.
Affectation☘
Lorsqu'on affecte la valeur 3
à la variable a
en Python, un objet de type int
et de valeur 3
est créé.
L'affectation :
>>> a = 3
int
et de valeur 3
auquel on accole l' « étiquette » (le nom) a
(cf. dessin ci-contre).
Attention☘
Les instructions :
>>> a = 3
>>> a = a + 6
int
recevant la valeur 3+6
. On peut illustrer ce principe à l'aide du schéma suivant :
Important
Il faut comprendre que toute affectation crée un nouvel objet (une nouvelle boîte dans la partie « objets ») : ce n'est pas la première boîte qui reçoit une nouvelle valeur.
La première boîte existe toujours a priori mais c'est comme si elle n'existait plus : elle n'a plus d'étiquette, elle n'est donc plus accessible pour le programmeur (tout se passe comme si elle n'existait plus)
Compléments et vérification
Pour s'y retrouver entre les différents objets créés par un programme, Python leur affecte un numéro d'identification qu'il est possible de consulter en utilisant la fonction id()
. Cette fonction renvoie un entier que l'on peut interprêter comme l'adresse en mémoire de cet objet.
Testez les instructions suivantes dans la console pour vous en convaincre (bien évidemment, les valeurs renvoyées par la fonction id()
seront différentes sur votre machine).
>>> a = 3
>>> id(a)
8791620948864
>>> a = a + 6
>>> id(a)
8791620949056
Cas usuel☘
On considère les instructions suivantes :
>>> a = 3
>>> b = a + 6
- En ligne 1, création d'un objet de type
int
recevant la valeur3
et auquel on accole l'étiquettea
:
- En ligne 2, il y a tout d'abord la création d'un nouvel objet de type
int
recevant la valeur3+6
: - Puis on accole à cet objet l'étiquette
b
:
Dans ce cas, les deux boîtes ont toujours une étiquette : elles sont toutes les deux accessibles.
Cas particulier : affectation d'étiquette☘
Lorsqu'il n'y a pas de calcul dans la partie droite de l'affectation, Python ne crée pas de nouvel objet mais ajoute simplement une nouvelle étiquette à cet objet.
Les instructions suivantes :
1 2 |
|
- En ligne 1, création d'un objet de type
int
recevant la valeur3
et auquel on accole l'étiquettea
:
- En ligne 2, ajout d'une étiquette
b
sur l'objet existant.
Nous verrons plus loin que ce comportement sera important à comprendre pour des objets plus complexes
que les int
et les float
(pour les chaînes, les listes, les tuples notamment).
Vérification avec id()
>>> a = 3
>>> id(a)
8791620948864
>>> b = a
>>> id(b)
8791620948864