Prépa Python

Basique — chapitre 15 sur 54

Les tuples

Séquences immuables et leurs usages

55 min10 évaluations

Les tuples ressemblent beaucoup aux listes… avec une différence fondamentale : ils sont immuables. Cette particularité leur donne des usages spécifiques : retours multiples de fonction, données constantes, clés de dictionnaire. Le TOSA teste surtout les différences avec les listes.

Qu'est-ce qu'un tuple ?

Un tuple est une séquence ordonnée et immuable d'éléments, pouvant être de types différents.

python
coordonnees = (48.85, 2.35)       # latitude, longitude
rgb = (255, 128, 0)                # rouge, vert, bleu
personne = ("Alice", 30, "Paris")
vide = ()

print(coordonnees, type(coordonnees))

Les quatre caractéristiques :

  1. Ordonnés : chaque élément a une position fixe.
  2. Immuables : on ne peut pas ajouter, retirer, changer.
  3. Indexés à partir de 0.
  4. Hétérogènes : mélange de types autorisé.

Créer un tuple

On utilise des parenthèses () ou juste des virgules :

python
t1 = (1, 2, 3)
t2 = 1, 2, 3               # les parenthèses sont facultatives !
t3 = tuple([1, 2, 3])      # depuis une liste

print(t1)
print(t2)
print(t3)
print(t1 == t2 == t3)

Tuple à un seul élément — attention !

Accès et lecture : comme une liste

On accède aux éléments par indice, on peut faire du slicing, tout comme les listes.

python
personne = ("Alice", 30, "Paris")

print(personne[0])       # "Alice"
print(personne[-1])      # "Paris"
print(personne[0:2])     # ("Alice", 30)
print(len(personne))     # 3
print("Alice" in personne)   # True

On ne peut PAS modifier un tuple

C'est la différence fondamentale avec une liste.

python
couleurs = ("rouge", "vert", "bleu")
couleurs[0] = "jaune"

Pas d'append, pas de remove, pas de réaffectation d'élément. Seules opérations permises : lecture, concaténation avec + (crée un nouveau tuple), répétition avec *, slicing (crée un nouveau tuple).

python
t1 = (1, 2, 3)
t2 = (4, 5)

# Concaténation → nouveau tuple
t3 = t1 + t2
print(t3)

# Répétition → nouveau tuple
t4 = t1 * 2
print(t4)

# Slicing → nouveau tuple
t5 = t1[:2]
print(t5)

Déballage (unpacking)

Le déballage permet d'affecter plusieurs variables en une seule ligne, dans l'ordre du tuple.

python
point = (3, 5)
x, y = point              # unpacking
print("x =", x, "| y =", y)

Ça fonctionne aussi avec une liste :

python
nom, age, ville = ["Alice", 30, "Paris"]
print(nom, age, ville)

Échanger deux variables

Un idiome très Pythonique que le TOSA adore :

python
a, b = 10, 20
print("Avant :", a, b)

a, b = b, a               # échange en une ligne !
print("Après :", a, b)

Sans ça, il faudrait une variable temporaire :

python
# Version classique (autres langages)
temp = a
a = b
b = temp

Déballage avec * (bonus)

Le * permet de récupérer "tout le reste" dans une variable.

python
nombres = (1, 2, 3, 4, 5)

premier, *milieu, dernier = nombres
print("premier :", premier)
print("milieu  :", milieu)       # list (pas tuple !)
print("dernier :", dernier)

Les méthodes des tuples

Les tuples étant immuables, ils ont très peu de méthodes (seulement 2, contre ~10 pour les listes) :

Méthode Effet
count(x) Nombre d'occurrences de x
index(x) Indice de la 1ère occurrence
python
t = (1, 2, 3, 2, 4, 2)
print(t.count(2))     # 3
print(t.index(3))     # 2

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

Bonne question ! Voici les cas typiques :

1. Représenter des données immuables par nature

Coordonnées géographiques, couleur RGB, date → ces données ne changent pas. Un tuple exprime cette immuabilité.

python
# ✅ Tuple : l'immuabilité a du sens
paris = (48.85, 2.35)
rouge = (255, 0, 0)

# ❌ Liste : pourquoi serait-elle modifiable ?
paris_liste = [48.85, 2.35]

2. Retour multiple d'une fonction

Les fonctions Python renvoient souvent un tuple quand il y a plusieurs valeurs à retourner.

python
def min_max(liste):
    return min(liste), max(liste)       # renvoie un tuple

resultat = min_max([3, 1, 4, 1, 5, 9, 2, 6])
print(resultat, type(resultat))

# Déballage immédiat très courant
petit, grand = min_max([3, 1, 4, 1, 5, 9, 2, 6])
print("Min:", petit, "| Max:", grand)

3. Clés de dictionnaire

Un dictionnaire (chapitre suivant) ne peut avoir comme clés que des objets immuables. Les tuples peuvent servir de clés, pas les listes.

python
# ✅ Tuple comme clé
scores = {
    ("Alice", "Maths"): 15,
    ("Alice", "Physique"): 14,
    ("Bob", "Maths"): 12,
}
print(scores[("Alice", "Maths")])
python
# ❌ Liste ne peut PAS être clé
d = {[1, 2]: "oups"}

4. Performance (marginal)

Les tuples sont légèrement plus rapides et consomment un peu moins de mémoire que les listes. Négligeable la plupart du temps, mais utile sur de très grandes structures.

Tuple vs liste : tableau récapitulatif

Caractéristique Liste [] Tuple ()
Ordonné ✅ ✅
Indexable ✅ ✅
Hétérogène ✅ ✅
Modifiable ✅ ❌
Nombre de méthodes ~10 2
Peut être clé de dict ❌ ✅
Syntaxe de création [1, 2, 3] (1, 2, 3) ou 1, 2, 3
Performance Normale Légèrement meilleure

Exercices

quiz 01.06.q1réponse unique
Quelle est la différence principale entre une liste et un tuple ?
quiz 01.06.q2réponse unique
Que vaut type((5)) ?
quiz 01.06.q3réponse unique
Quelle opération est impossible sur un tuple t = (1, 2, 3) ?
quiz 01.06.q4réponse unique
Que s'affiche-t-il ?
a, b, c = (1, 2, 3)
print(b)
quiz 01.06.q5réponse unique
Que fait ce code ?
x, y = 10, 20
x, y = y, x
quiz 01.06.q6réponse unique
Que renvoie une fonction qui contient return 1, 2, 3 ?
quiz 01.06.q7réponse unique
Peut-on utiliser un tuple comme clé d'un dictionnaire ?

exercice 01.06.x1à faire

Voici une liste de coordonnées de villes sous forme de tuples :

python
villes = [
    ("Paris", 48.85, 2.35),
    ("Lyon", 45.76, 4.83),
    ("Marseille", 43.29, 5.37),
]

Écrivez un programme qui affiche pour chaque ville : son nom, sa latitude et sa longitude dans une phrase de la forme : Paris : latitude 48.85, longitude 2.35


exercice 01.06.x2à faire

Rangez dans le tuple extremes le plus petit et le plus grand élément de la liste nombres, dans cet ordre, puis déballez-le dans petit et grand.


exercice 01.06.x3à faire

Une personne vous montre ce code ancien :

python
a = 10
b = 20
temp = a
a = b
b = temp

Réécrivez l'échange en une seule ligne, sans variable intermédiaire, avec la syntaxe Pythonique.


À retenir