Sommaire
- Créer une variable
- Deux modèles mentaux : C et Python
- Objet et Référence
- Réassignation d'une variable
- Plusieurs noms peuvent référencer le même objet
- Déclarer plusieurs variables en une seule ligne
- Exercice
- Résumé en images
Ayant appris le C, je me suis naturellement demandé, lorsque j'ai commencé à apprendre Python, comment les variables et la mémoire y étaient gérées.
J'avais l'habitude de voir une variable comme une case mémoire contenant directement une valeur. En Python, le modèle est différent : une variable n'est pas une zone mémoire qui stocke une valeur, mais un nom qui référence un objet.
En Python, les variables permettent de donner un nom à une information pour pouvoir la réutiliser dans le programme.
Créer une variable
En Python, il n’y a pas de déclaration séparée de variable comme dans certains autres langages. Une variable existe à partir du moment où un nom reçoit une valeur.
variable # ❌ le nom n’a jamais reçu de valeur
variable = "valeur" # ✅ le nom reçoit une valeur
Cette ligne fait deux choses en même temps :
- Python crée ou récupère l’objet
"valeur". - Python associe le nom
variableà cet objet.
Mais que se passe-t-il réellement derrière cette instruction ? Et pourquoi ne peut-on pas créer une variable sans lui attribuer de valeur ?
Deux modèles mentaux : C et Python
En C, une variable peut être imaginée comme une case mémoire typée qui contient directement une valeur. La variable possède alors u n type, une adresse, une taille connue, et la valeur est stockée dans cette zone mémoire.
Exemple mental en C :
int age = 21;
En Python, il faut faire attention au mot “stocker”, car le modèle mental est différent. En Python, une variable est un nom qui référence un objet Python en mémoire.
Objet et Référence
Dans le contexte des variables, un objet est un élément géré par l'interpréteur Python qui possède au minimum une valeur, un type et une identité.
Référencer un objet signifie que le nom de la variable permet de retrouver cet objet.
La variable ne contient pas directement l’objet, elle est liée à lui par une référence.
On peut imaginer cette référence comme une flèche entre le nom et l’objet.
💡
Référence = lien entre un nom de variable et un objet.
Exemple mental
age = 21
# age ─────► objet int contenant 21
age = le nom de variable
21 = l’objet de type int
─────► = la référence entre le nom et l’objet
valeur → 21
type → int
identité → un identifiant interne qui permet à Python de distinguer cet objet d’un autre
Analogie :
En C :
la variable est une boîte qui contient une valeur
En Python :
la variable est un nom qui pointe vers un objet
En Python, l'étape consistant à déclarer une variable vide avant de lui attribuer une valeur n'existe pas. Une variable apparaît au moment où un nom est associé à un objet.
Si on essaye d’utiliser un nom qui n’a jamais reçu de valeur, Python lève une erreur :
Exemple :
print(message)
# => NameError: name 'message' is not defined
💡
Si on veut représenter volontairement une absence de valeur, on utilise None.
message = None
# message ─────► objet spécial None
Ici, le nom message existe : il référence l’objet spécial None.
C’est différent d’un nom (variable) qui n’a jamais été défini.
Réassignation d’une variable
Réassigner une variable signifie réutiliser un nom déjà existant pour l’associer à un nouvel objet.
La réassignation ne modifie pas la valeur de l’ancien objet, elle change surtout l’association entre un nom et un objet.
Exemple :
age = 21
Au départ : age ─────► objet int contenant 21
age = 22
Après : age ─────► objet int contenant 22
message = "Hello"
Au départ : message ─────► objet int contenant "Hello"
message = "Bonjour"
Après : age ─────► objet int contenant "Bonjour"
Les nom age ou message ne références plus le même objet, ils références maintenant un nouvel objet.
Cas particulier : x = x + 1
x = x + 1 n’est pas un cas différent au niveau de la réassignation., c’est juste une réassignation où la nouvelle valeur dépend de l’ancienne.
Ici, la nouvelle valeur n’est pas écrite directement. Python doit d’abord la calculer.
exemple :
x = 10
# x ─────► objet int contenant 10
x = x + 1
# Calcul : x + 1 donne un nouvel objet int contenant 11#
# x ─────► objet int contenant 11
Python fait les étapes suivantes :
- Il lit la valeur actuellement référencée par x.
- Il calcule x + 1.
- Il réassocie le nom x au résultat.
Cette ligne ne se lit pas comme une égalité mathématique, car en En Python, = ne compare pas il associe ou réassocie un nom à un objet. On parle alors opérateur d'affectation
Plusieurs noms peuvent référencer le même objet
En Python, une variable est un nom qui référence un objet, cela signifie que plusieurs noms différents peuvent référencer le même objet.
Exemple simple
a = 21
b = a
On pourrait croire que Python copie simplement la valeur de a dans b, mais le modèle mental est plutôt :
-
a = 21⇒ Python associe le nomaà un objetintcontenant la valeur21. -
b = a⇒ Python regarde l’objet actuellement référencé para, puis associe aussi le nombà ce même objet.Il crée une nouvelle association entre un nom et un objet existant.
Les deux noms a et b référencent donc le même objet :
a ─────► objet int contenant 21
b ─────► même objet int contenant 21
Réassigner un des deux noms
Si plusieurs noms référencent le même objet, puis qu’on réassigne un seul nom, ce nom change de référence, mais pas les autres noms. et donc on ne modifie pas automatiquement les autres noms.
Les autres noms continuent de référencer l’objet qu’ils référencaient déjà.
exemple :
message = "Hello"
# message ─────► objet str contenant "Hello"
salutation = message
# salutation ─────► meme objet str contenant "Hello"
message = "Bonjour"
# message ─────► objet str contenant "Bonjour"
# salutation ─────► ancien objet str contenant "Hello"
message change de référence, mais salutation continue de référencer l’ancien objet.
Même valeur ≠ forcément même objet
Même valeur ne veut pas toujours dire même objet.Et None est un cas spécial du contraire
Deux variables peuvent avoir la même valeur sans forcément référencer le même objet.
Exemple simple :
a = 21
b = 21
**a référence un objet int contenant 21
b référence un objet int contenant 21**
Ici, les deux objets peuvent avoir le même contenu, sans être forcément le même objet.
La question de savoir si deux objets identiques sont physiquement le même objet en mémoire dépend parfois d’optimisations internes de Python.
Même valeur ≠ forcément même objet.
Cas particulier : None
None est un objet spécial qui représente l’absence volontaire de valeur.
Dans ce cas de l’exemple qui suit, a et b référencent le même objet spécial None :
a = None
# a ─────► objet spécial None
b = None
# b ─────► même objet spécial None
Déclarer plusieurs variables en une seule ligne
En Python, on peut associer plusieurs variables à plusieurs valeurs en une seule ligne.
prenom, nom_famille = "Alice", "Martin"
Revient à écrire :
prenom = "Alice"
nom_famille = "Martin"
Ici :
prenom
→ référence l’objet "Alice"
nom_famille
→ référence l’objet "Martin"
Exemple avec split()
nom = "Alice Martin"
prenom, nom_famille = nom.split(" ")
print(prenom) # Alice
print(nom_famille) # Martin
Ici, nom.split(" ") découpe la chaîne "Alice Martin" en deux morceaux , puis Python associe chaque valeur à une variable.
Un peu de pratique
Essayez de prédire le résultat avant d'exécuter le programme :
a = "Bonjour"
b = a
a = "Salut"
print(a)
print(b)






Top comments (0)