Retour sur les variables

3.3 Retour sur les variables

Objectifs d'apprentissage

À la fin de cette section, vous devriez être en mesure de :

  • Distinguer les variables, les objets et les références.
  • Dessiner des diagrammes mémoire avec des entiers, des flottants et des chaînes de caractères.

Références aux objets

En Python, chaque variable fait référence à un objet. L'instruction d'affectation message = "Hello" fait en sorte que la variable message fasse référence à l'objet "Hello". Plusieurs variables peuvent faire référence au même objet. Ex. : greeting = message fait en sorte que greeting fasse référence au même objet que message. Un diagramme mémoire (memory diagram) montre la relation entre les variables et les objets.

Faites le point

Exemple de diagramme mémoire

Concepts en pratique

Variables et objets

1.
Combien d'instructions d'affectation sont présentes dans l'animation ci-dessus ?
  1. 2
  2. 3
  3. 4
2.
Parmi les propositions suivantes, laquelle décrit le mieux les objets affectés ?
  1. deux objets float
  2. deux objets int, un objet float
  3. un objet int, un objet float
3.
Quel symbole est utilisé pour représenter la valeur actuelle d'une variable ?
  1. une flèche
  2. une petite boîte noire
  3. une boîte arrondie

Pour aller plus loin

Python Tutor est un outil en ligne gratuit permettant de visualiser l'exécution du code. L'utilisateur peut saisir n'importe quel code Python, cliquer sur « Visualize Execution », puis cliquer sur le bouton « Next » pour exécuter le code ligne par ligne. Voici l'exemple rating et score issu de l'animation ci-dessus.

Python Tutor est également utile pour dessiner des diagrammes mémoire similaires à ceux présentés dans ce livre. Avant de cliquer sur « Visualize Execution », remplacez l'option du milieu « inline primitives, don't nest objects [default] » par « render all objects on the heap (Python/Java) » comme indiqué dans la capture d'écran suivante :

Capture d'écran des paramètres de Python Tutor, avec la liste déroulante du milieu ouverte sur le dernier paramètre.
Figure 3.2

Propriétés des objets

Chaque objet possède une identité, un type et une valeur :

  • L'identité (identity) d'un objet est un entier unique associé à cet objet. En général, cet entier fait référence à l'emplacement mémoire où l'objet est stocké. Une fois créé, l'identité d'un objet ne change jamais. La fonction intégrée id() renvoie l'identité de l'objet.

  • Le type d'un objet détermine les valeurs et les opérations possibles pour cet objet. Ex. : Les entiers et les flottants peuvent être « divisés » à l'aide de l'opérateur /, mais pas les chaînes de caractères. La fonction intégrée type() renvoie le type de l'objet.

  • La valeur (value) d'un objet représente son état actuel. De nombreux objets, comme les nombres et les chaînes de caractères, ne peuvent pas être modifiés une fois créés. Certains objets, tels que les listes (présentées plus loin), sont conçus pour être modifiables.

Faites le point

Identité, type et valeur

Concepts en pratique

id() et type()

4.
Quelle valeur pourrait être renvoyée par id(rating) ?
  1. 9793344
  2. <class 'float'>
  3. 10.0
5.
Quelle valeur pourrait être renvoyée par type(rating) ?
  1. 10.0
  2. "float"
  3. <class 'float'>
6.
Quelle expression renvoie la valeur d'un objet ?
  1. value(rating)
  2. rating
  3. "rating"

Pour aller plus loin

Comme le montre un diagramme mémoire, les variables et les objets sont deux concepts distincts. Appeler une fonction comme id() ou type() renvoie des informations sur un objet, et non sur une variable. En réalité, une variable n'a ni identité ni type, comme l'illustre cet exemple :

    >>> rating = 10  # Integer object somewhere in memory.
    >>> type(rating)
    <class 'int'>
    >>> id(rating)
    9793344
    >>> rating = "ten"  # String object somewhere else in memory.
    >>> type(rating)
    <class 'str'>
    >>> id(rating)
    140690967388272

On pourrait penser à tort que le type ou l'identité de la variable rating change. Cependant, la seule chose qui change est l'objet auquel la variable rating fait référence.

À vous d'essayer

Trois variables

  1. Dessinez un diagramme mémoire pour le code suivant : a = 1 b = 2 c = b b = a a = c
  2. Exécutez le code sur Python Tutor pour vérifier votre réponse.
  3. En vous basant sur votre diagramme, répondez à ces questions :
    • Quelle est la valeur finale de a, b et c ?
    • Combien d'objets entiers sont créés ?

À vous d'essayer

Différents types

  1. Dessinez un diagramme mémoire pour le code suivant : name = "Chocolate" length = len(name) price = 1.99 lower = min(length, price) product = name name = name * 2
  2. Exécutez le code sur Python Tutor pour vérifier votre réponse.
  3. En vous basant sur votre diagramme, répondez à ces questions :
    • Quels sont le type et la valeur de chaque objet ?
    • À quel objet chaque variable fait-elle référence ?