L'affectation☘
Qu'est-ce qu'une affectation?☘
Une affectation consiste à donner un nom, une étiquette à un objet.
Par exemple:
1 2 3 4 5 | >>> a = 2 # instruction d'affectation >>> type(2) <class 'int'> >>> type(a) <class 'int'> |
En ligne 1 de ce code, on attribue l'étiquette a à l'objet 2 (on dit également que l'on affecte la valeur 2 à a).
Lorsqu'en ligne 4 on demande le type de a, c'est en fait le type de l'objet étiqueté par a que l'on demande. a, en lui-même, n'a pas vraiment de type, ce n'est qu'un nom donné à un objet (objet ici de type int).
On utilisera le schéma suivant pour représenter l'attribution de l'étiquette a à l'objet 2 (ou affectation de 2 à a) que l'on nommera par la suite "schéma-mémoire":
Réaffectation☘
Le code suivant montre que l'étiquette "a" n'a pas de type... elle cible une valeur ayant un type:
1 2 3 4 5 6 | >>> a = 8 >>> type(a) <class 'int'> >>> a = 83.2 >>> type(a) <class 'float'> |
En ligne 1, on affecte une valeur entière à a. Lorsqu'on exécute type(a)
,
on obtient donc le type de cette valeur entière.
Puis, en ligne 4, on décide que a n'est plus une étiquette sur l'entier 8 mais sur le flottant 83.2. Lorsqu'on demande le type de a, c'est donc le type de 83.2 que l'on obtient.
Note
Dans d'autres langages, cela ne serait pas possible. Par exemple en langage C, le programmeur doit annoncer dans le code qu'il associera des entiers à la variable de nom a. Il ne lui est alors pas possible d'affecter des valeurs non entières à cette variable a dans la suite du programme.
id☘
Chaque objet en python a un identifiant. On peut se représenter cet identifiant comme son adresse en mémoire.
1 2 3 4 5 6 7 8 | >>> id(2) 94660622627744 >>> a = 2 >>> id(a) 94660622627744 >>> b = a >>> id(b) 94660622627744 |
Le code ci-dessus montre que l'objet 2 a un identifiant. Si l'on attribue une étiquette a à cet objet, lorsqu'on demande l'identifiant de l'étiquette a, c'est en fait l'identifiant de l'objet étiqueté par a que l'on demande.
La ligne b = a
consiste à attribuer une seconde étiquette à l'objet désigné par a, on aura donc id(b) = id(a).
Schéma-mémoire:
Question☘
Observez le code suivant:
1 2 3 4 | >>> id(3) 94660622627776 >>> a = 3 >>> a = 4 |
- Que vaut
id(a)
après la ligne 3 (mais avant exécution de la ligne 4)? - Que vaut
id(a)
après la ligne 4?
réponse
Après la ligne 3, a est une étiquette sur l'objet 3, donc id(a) = id(3) = 94660622627776.
Après la ligne 4, a n'est plus une étiquette sur l'objet 3, a est une étiquette sur l'objet 4.
On aura donc id(a) = id(4) (on ne peut pas connaître la valeur de cet id, cet id
est fixe dans une même session python mais change lorsqu'on relance la session python).
Réétiqueter☘
Question 1☘
Donner un schéma-mémoire correspondant aux lignes 1 à 3 du code ci-dessous.
1 2 3 4 | >>> a = 2 >>> b = a >>> c = b >>> a = 5 |
schéma
Avec les trois premières lignes de code:
On peut confirmer cela en affichant les identifiants:
1 2 3 4 5 | >>> a = 2 >>> b = a >>> c = b >>> id(a),id(b),id(c) (94207103767456, 94207103767456, 94207103767456) |
Question 2☘
Donner de même un schéma-mémoire après exécution de la ligne 4.
schéma
Après la ligne 4:
Avec les identifiants:
1 2 3 4 5 6 | >>> a = 2 >>> b = a >>> c = b >>> a = 5 >>> id(a), id(b), id(c) (94207103767552, 94207103767456, 94207103767456) |