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.
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 :
- Ordonnés : chaque élément a une position fixe.
- Immuables : on ne peut pas ajouter, retirer, changer.
- Indexés à partir de 0.
- Hétérogènes : mélange de types autorisé.
Créer un tuple
On utilise des parenthèses () ou juste des virgules :
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.
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) # TrueOn ne peut PAS modifier un tuple
C'est la différence fondamentale avec une liste.
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).
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.
point = (3, 5)
x, y = point # unpacking
print("x =", x, "| y =", y)Ça fonctionne aussi avec une liste :
nom, age, ville = ["Alice", 30, "Paris"]
print(nom, age, ville)Échanger deux variables
Un idiome très Pythonique que le TOSA adore :
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 :
# Version classique (autres langages)
temp = a
a = b
b = tempDéballage avec * (bonus)
Le * permet de récupérer "tout le reste" dans une variable.
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 |
t = (1, 2, 3, 2, 4, 2)
print(t.count(2)) # 3
print(t.index(3)) # 2Pourquoi 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é.
# ✅ 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.
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.
# ✅ Tuple comme clé
scores = {
("Alice", "Maths"): 15,
("Alice", "Physique"): 14,
("Bob", "Maths"): 12,
}
print(scores[("Alice", "Maths")])# ❌ 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
type((5)) ?
t = (1, 2, 3) ?
a, b, c = (1, 2, 3) print(b)
x, y = 10, 20 x, y = y, x
return 1, 2, 3 ?
Voici une liste de coordonnées de villes sous forme de tuples :
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
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.
Une personne vous montre ce code ancien :
a = 10
b = 20
temp = a
a = b
b = tempRéécrivez l'échange en une seule ligne, sans variable intermédiaire, avec la syntaxe Pythonique.