Loading [Contrib]/a11y/accessibility-menu.js
Skip to content

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
  1. Que vaut id(a) après la ligne 3 (mais avant exécution de la ligne 4)?
  2. 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)