OUJOOD.COM
En Python, listes et tuples servent tous les deux à regrouper plusieurs valeurs dans une seule variable. La syntaxe est presque identique — crochets pour la liste, parenthèses pour le tuple. Mais ils ne sont pas interchangeables : leur différence fondamentale est la mutabilité.
Une liste peut être modifiée après sa création : on peut ajouter, supprimer ou remplacer des éléments. Un tuple est immuable : une fois créé, son contenu ne change plus. Ce cours explique ce que ça change en pratique, et comment choisir entre les deux.
Syntaxe de base
# Liste : crochets, modifiable fruits = ["pomme", "poire", "cerise"] fruits.append("mangue") fruits[0] = "abricot" print(fruits) # Résultat : ['abricot', 'poire', 'cerise', 'mangue'] # Tuple : parenthèses, non modifiable coords = (48.85, 2.35) print(coords[0]) # Résultat : 48.85 # Tentative de modification → erreur try: coords[0] = 0 except TypeError as e: print(e) # Résultat : 'tuple' object does not support item assignment
Différences clés
| Caractéristique | Liste | Tuple |
|---|---|---|
| Syntaxe | [1, 2, 3] | (1, 2, 3) |
| Modifiable | ✅ Oui | ❌ Non |
| Utilisable comme clé de dict | ❌ Non | ✅ Oui |
| Méthodes disponibles | append, remove, sort… | count, index |
| Mémoire | Plus lourde | Plus légère |
| Usage typique | Collection évolutive | Données fixes |
Ce que l'immuabilité change concrètement
L'immuabilité d'un tuple a trois conséquences pratiques importantes.
1. Les tuples peuvent servir de clés de dictionnaire
Les clés d'un dictionnaire doivent être hashables — c'est-à-dire que leur valeur ne doit pas changer. Un tuple est hashable, une liste ne l'est pas.
# Tuple comme clé de dictionnaire (coordonnées GPS → ville) villes = { (48.85, 2.35): "Paris", (51.50, -0.12): "Londres", (40.71, -74.00): "New York" } print(villes[(48.85, 2.35)]) # Résultat : Paris # Une liste ne peut pas être clé de dictionnaire try: d = {[1, 2]: "valeur"} except TypeError as e: print(e) # Résultat : unhashable type: 'list'
2. Les tuples sont plus légers en mémoire
import sys liste = [1, 2, 3, 4, 5] tuple_ = (1, 2, 3, 4, 5) print(sys.getsizeof(liste)) # Résultat : 120 octets (environ) print(sys.getsizeof(tuple_)) # Résultat : 80 octets (environ)
3. Les tuples signalent l'intention dans le code
Quand vous utilisez un tuple, vous communiquez à quiconque lit votre code : « Ces valeurs vont ensemble et ne changeront pas. » Un tuple de coordonnées GPS, une date (année, mois, jour), un point en 2D — ce sont des données structurées dont les éléments ont chacun un rôle précis.
# Tuple : données structurées, chaque position a un sens précis point = (3.0, 4.0) # x, y date_naissance = (1990, 6, 15) # année, mois, jour couleur_rgb = (255, 128, 0) # rouge, vert, bleu # Liste : collection d'éléments similaires, amenée à évoluer scores = [85, 90, 78, 92] noms = ["Alice", "Bob", "Claire"]
Déballage (unpacking)
Listes et tuples supportent tous les deux le déballage, mais on le voit le plus souvent avec des tuples — notamment pour retourner plusieurs valeurs depuis une fonction.
# Déballage d'un tuple point = (3.0, 4.0) x, y = point print(f"x = {x}, y = {y}") # Résultat : x = 3.0, y = 4.0 # Fonction qui retourne plusieurs valeurs (tuple implicite) def min_max(nombres): return min(nombres), max(nombres) minimum, maximum = min_max([5, 2, 8, 1, 9]) print(f"Min : {minimum}, Max : {maximum}") # Résultat : Min : 1, Max : 9 # Déballage avec * pour capturer le reste premier, *reste, dernier = (10, 20, 30, 40, 50) print(premier, reste, dernier) # Résultat : 10 [20, 30, 40] 50
Convertir entre liste et tuple
# Liste → tuple (figer les données) noms = ["Alice", "Bob", "Claire"] noms_fixes = tuple(noms) print(noms_fixes) # Résultat : ('Alice', 'Bob', 'Claire') # Tuple → liste (pour modifier) coords = (48.85, 2.35) coords_liste = list(coords) coords_liste[0] = 45.75 coords = tuple(coords_liste) print(coords) # Résultat : (45.75, 2.35)
Tuple à un seul élément
Attention à la syntaxe : un tuple à un seul élément nécessite une virgule obligatoire. Sans elle, Python interprète les parenthèses comme une simple expression.
# Pas un tuple — juste une chaîne entre parenthèses pas_un_tuple = ("bonjour") print(type(pas_un_tuple)) # Résultat : <class 'str'> # Tuple à un seul élément : virgule obligatoire vrai_tuple = ("bonjour",) print(type(vrai_tuple)) # Résultat : <class 'tuple'>
Par carabde | Mis à jour le 21 avril 2026