
Les variables : nommer et stocker des données
Maîtrisez les variables en Python : déclaration, affectation, types de données, règles de nommage et bonnes pratiques. Découvrez comment Python gère la mémoire.
Qu'est-ce qu'une variable ? Définition et rôle
En programmation, une variable est un nom symbolique associé à une valeur. On peut imaginer une variable comme une boîte qui contient une donnée. Cette boîte a une étiquette (le nom de la variable) qui permet de l'identifier et d'accéder à son contenu.
Les variables permettent de stocker des données en mémoire, de les manipuler, et de les réutiliser tout au long d'un programme. Elles sont essentielles pour écrire des programmes qui ne se contentent pas d'exécuter des instructions fixes, mais qui peuvent adapter leur comportement en fonction des données qu'ils traitent.
En Python, les variables ne sont pas typées statiquement. Cela signifie que vous n'avez pas besoin de déclarer explicitement le type d'une variable (par exemple, entier, chaîne de caractères, liste) avant de l'utiliser. Le type de la variable est déterminé dynamiquement, en fonction de la valeur qui lui est affectée.
Déclarer et affecter une valeur à une variable : l'opérateur =
En Python, la déclaration et l'affectation d'une valeur à une variable se font simultanément, à l'aide de l'opérateur `=`. Par exemple :
x = 10
nom = "Alice"
message = "Bonjour, " + nomDans cet exemple, nous avons créé trois variables : `x`, `nom`, et `message`. La variable `x` contient l'entier 10, la variable `nom` contient la chaîne de caractères "Alice", et la variable `message` contient la chaîne de caractères "Bonjour, Alice".
L'opérateur `=` est un opérateur d'affectation, pas un opérateur d'égalité mathématique. Il signifie "affecter la valeur à droite du signe `=` à la variable à gauche du signe `=`".
Vous pouvez affecter une nouvelle valeur à une variable à tout moment, en utilisant à nouveau l'opérateur `=`. La nouvelle valeur remplacera l'ancienne. Par exemple :
x = 10
print(x) # Affiche 10
x = 20
print(x) # Affiche 20Règles de nommage des variables : bonnes pratiques et conventions
En Python, les noms de variables doivent respecter certaines règles :
- Un nom de variable doit commencer par une lettre (majuscule ou minuscule) ou par un trait de soulignement (_).
- Le reste du nom peut contenir des lettres, des chiffres, et des traits de soulignement.
- Les noms de variables sont sensibles à la casse (c'est-à-dire que `ma_variable`, `Ma_Variable`, et `MA_VARIABLE` sont considérées comme des variables différentes).
- Certains mots sont réservés par Python et ne peuvent pas être utilisés comme noms de variables (par exemple, `if`, `else`, `for`, `while`, `def`, `class`, `import`, `return`, etc.).
Au-delà de ces règles, il existe des conventions de nommage recommandées par la communauté Python (PEP 8) :
- Utilisez des noms descriptifs et significatifs pour vos variables. Par exemple, `age` est préférable à `a`, `nom_complet` est préférable à `nc`.
- Utilisez des minuscules pour les noms de variables, avec des mots séparés par des traits de soulignement (snake_case). Par exemple : `ma_variable`, `nombre_de_clients`.
- Pour les constantes (c'est-à-dire les variables dont la valeur n'est pas censée changer), utilisez des majuscules, avec des mots séparés par des traits de soulignement. Par exemple : `PI`, `MAX_SIZE`.
- Evitez d'utiliser des noms de variables qui commencent par un double trait de soulignement (`__`), car ils ont une signification spéciale en Python (variables "privées" dans les classes).
Respecter ces règles et ces conventions rend votre code plus lisible, plus compréhensible, et plus facile à maintenir.
Le typage dynamique de Python : comprendre le concept
Comme mentionné précédemment, Python utilise un typage dynamique. Cela signifie que le type d'une variable n'est pas fixé à l'avance, mais est déterminé par la valeur qui lui est affectée.
Par exemple :
x = 10 # x est un entier
print(type(x)) # Affiche
x = "Bonjour" # Maintenant, x est une chaîne de caractères
print(type(x)) # Affiche La fonction `type()` permet de connaître le type d'une variable.
Ce qui se passe, c'est que l'on affecte une nouvelle zone mémoire à `x`. L'ancienne zone mémoire, contenant `10` est toujours disponible mais n'est plus pointée par `x`.
Le typage dynamique offre une grande flexibilité, mais il peut aussi être source d'erreurs si l'on n'y prend pas garde. Il est important de bien comprendre comment Python gère les types de données pour éviter les comportements inattendus.
Références et gestion de la mémoire en Python (notions avancées)
En Python, lorsque vous affectez une valeur à une variable, vous ne copiez pas réellement la valeur, mais vous créez une référence vers cette valeur. Cela a des implications importantes, notamment lorsque vous manipulez des objets mutables (comme les listes ou les dictionnaires).
Exemple :
liste1 = [1, 2, 3]
liste2 = liste1 # liste2 est une référence vers la même liste que liste1
liste2.append(4)
print(liste1) # Affiche [1, 2, 3, 4]
print(liste2) # Affiche [1, 2, 3, 4]Dans cet exemple, `liste1` et `liste2` pointent vers la même liste en mémoire. Modifier `liste2` modifie donc également `liste1`.
Si vous souhaitez créer une copie indépendante d'une liste, vous devez utiliser la méthode `copy()` (pour une copie superficielle) ou la fonction `deepcopy()` du module `copy` (pour une copie profonde) :
import copy
liste1 = [1, 2, 3]
liste2 = liste1.copy() # Crée une copie superficielle
liste3 = copy.deepcopy(liste1) # Crée une copie profonde
liste2.append(4)
liste3.append(5)
print(liste1) # Affiche [1, 2, 3]
print(liste2) # Affiche [1, 2, 3, 4]
print(liste3) # Affiche [1, 2, 3, 5]Python utilise un mécanisme de comptage de références pour gérer la mémoire. Chaque objet en mémoire a un compteur qui indique le nombre de variables (ou d'autres objets) qui pointent vers lui. Lorsque ce compteur tombe à zéro, l'objet n'est plus accessible et la mémoire qu'il occupait peut être libérée (c'est le "ramasse-miettes" ou "garbage collector").
Comprendre ces concepts de références et de gestion de la mémoire est important pour écrire du code Python efficace et éviter les erreurs liées à la modification inattendue d'objets.