Les tuples en Python

@joekakone

Joseph Konka @joekakone

03/03/2026 · 8 min

Comprenez l'utilité des tuples en Python : séquences ordonnées immuables, déballage élégant (unpacking), opérateur étoile (*), empreinte mémoire optimisée et utilisation comme clés de dictionnaires.

Les tuples en langage Python#

En Python, un tuple (ou n-uplet) est une séquence ordonnée d'éléments semblable à une liste, mais présentant une caractéristique fondamentale : il est strictement immuable (immutable). Une fois créé en mémoire, il est impossible de lui ajouter, d'en retirer ou de modifier ses éléments.


1. Création et le piège du singleton#

On définit habituellement un tuple en entourant ses éléments de parenthèses (...) séparés par des virgules :

# Tuple vide
vide = ()
vide_alt = tuple()

# Tuple de coordonnées géographiques
coordonnees_paris = (48.8566, 2.3522)

# Les parenthèses sont optionnelles : c'est la virgule qui crée le tuple !
point = 10, 20
print(type(point))  # <class 'tuple'>

[!WARNING] Le piège classique du tuple à un seul élément :
Si vous écrivez t = (42), Python interprète les parenthèses comme une priorité mathématique et assigne un entier (int) !
Pour créer un tuple d'un seul élément (singleton), vous devez obligatoirement inclure une virgule terminale :

pas_un_tuple = (42)    # Type int !
vrai_tuple = (42,)      # Type tuple !


2. Pourquoi utiliser un tuple plutôt qu'une liste ?#

Pourquoi s'encombrer d'une structure immuable alors que les listes peuvent tout faire ?

Avantage Explication
Intégrité des données Protège les constantes critiques (paramètres réseau, dimensions d'écran) contre toute modification accidentelle dans le code.
Performance et mémoire Les tuples consomment moins de RAM et sont alloués plus rapidement par l'interpréteur CPython que les listes dynamiques.
Hachabilité (hash) Les tuples peuvent servir de clés dans un dictionnaire ou d'éléments dans un ensemble (set), ce qui est strictement interdit pour les listes !
# Tentative de modification directe :
jours_semaine = ("Lundi", "Mardi", "Mercredi")
# jours_semaine[0] = "Dimanche"  -> Lève immédiatement un TypeError !

3. Le déballage de tuples (Tuple Unpacking)#

Le déballage permet d'extraire simultanément chaque élément d'un tuple dans des variables distinctes en une seule affectation :

point_3d = (12.5, -4.0, 7.8)

# Déballage classique (le nombre de variables doit correspondre exactement)
x, y, z = point_3d
print(f"X={x}, Y={y}, Z={z}")

Déballage étendu avec l'opérateur étoile * (PEP 3132)#

Si vous ne connaissez pas à l'avance la taille de la séquence ou si vous ne vous intéressez qu'aux extrémités :

scores = (95, 88, 72, 65, 54, 40)

# Le premier score, le dernier score, et tout le reste dans une sous-liste :
premier, *intermediaires, dernier = scores

print("Vainqueur   :", premier)         # 95
print("Autres      :", intermediaires)  # [88, 72, 65, 54] (liste)
print("Dernier     :", dernier)         # 40

4. Retour de valeurs multiples dans une fonction#

En Python, une fonction ne peut formellement retourner qu'un seul objet. Toutefois, pour renvoyer plusieurs résultats à la fois, les développeurs Python tirent parti des tuples :

def calculer_statistiques(nombres: list[float]) -> tuple[float, float, float]:
    """Retourne simultanément la moyenne, le minimum et le maximum."""
    moyenne = sum(nombres) / len(nombres)
    minimum = min(nombres)
    maximum = max(nombres)

    # Retourne implicitement un tuple : (moyenne, minimum, maximum)
    return moyenne, minimum, maximum

# Récupération immédiate par déballage
notes = [15.0, 12.0, 18.0, 10.0]
moy, note_min, note_max = calculer_statistiques(notes)

print(f"Moyenne = {moy:.2f} | Min = {note_min} | Max = {note_max}")

5. Les tuples nommés : collections.namedtuple#

Lorsque vous manipulez des tuples contenant de nombreux champs, y accéder par des indices numériques (personne[0], personne[1]) nuit à la lisibilité. La bibliothèque standard propose namedtuple pour créer des tuples dont les champs sont accessibles par leur nom :

from collections import namedtuple

# Définition du modèle de données
Ville = namedtuple("Ville", ["nom", "pays", "population"])

# Instanciation
lome = Ville("Lome", "Togo", 1_800_000)
paris = Ville("Paris", "France", 2_160_000)

# Accès par attribut lisible (dot notation)
print(f"Capitale : {lome.nom} ({lome.pays}) - Hab : {lome.population:,}")

6. Défi d'application#

Écrivez une fonction echanger_extremes(t: tuple) qui prend en entrée un tuple de longueur au moins 2 et retourne un nouveau tuple où le premier et le dernier élément sont intervertis, en exploitant le déballage étendu avec l'opérateur étoile *.

Commentaires

Inscrivez-vous à une formation complète

Voir le catalogue