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.
Concepts en pratique
Variables et objets
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 :
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éetype()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.
Concepts en pratique
id() et type()
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
- Dessinez un diagramme mémoire pour le code suivant :
a = 1 b = 2 c = b b = a a = c - Exécutez le code sur Python Tutor pour vérifier votre réponse.
- En vous basant sur votre diagramme, répondez à ces questions :
- Quelle est la valeur finale de
a,betc? - Combien d'objets entiers sont créés ?
- Quelle est la valeur finale de
À vous d'essayer
Différents types
- 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 - Exécutez le code sur Python Tutor pour vérifier votre réponse.
- 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 ?