Adloun

sciences numériques et technologie (seconde) · Chapitre 6 · Exercice de TD

Deux noms, une seule liste

Listes et simulations aléatoires · Manipuler une liste · niveau 3 (difficile)

Énoncé

Prédire l'affichage de ce programme, l'exécuter, puis expliquer.

A = [1, 2, 3]
B = A
B.append(4)
print(A)
print(B)

Comparer avec le comportement de deux nombres (x = 10 ; y = x ; y = y + 1). Comment obtenir une vraie copie ?

Corrigé

L'affichage est [1, 2, 3, 4] deux fois. Modifier B a modifié A.

Explication. B = A ne crée aucune nouvelle liste : il donne un second nom à la même liste en mémoire. B.append(4) modifie cet unique objet, que les deux noms désignent.

Le contraste avec les nombres est frappant :

x = 10
y = x
y = y + 1
print(x, y)   # 10 11 : x n'a pas bougé

Mais la différence n'est pas de nature — elle vient de l'opération. y = y + 1 est une réaffectation : elle fait pointer y ailleurs, sans toucher à ce que x désigne. B.append(4) est une modification sur place : l'objet lui-même change, et tous ses noms en subissent l'effet. Un nombre ne peut pas être modifié sur place, une liste si.

Pour obtenir une vraie copie, trois écritures équivalentes :

C = A.copy()
C = list(A)
C = A[:]

C'est un des pièges les plus coûteux du langage, parce qu'il ne provoque aucune erreur : le programme tourne, et une liste que l'on croyait intacte a changé, souvent très loin de l'endroit fautif.

100 % gratuit

Essaie le suivant avec le tuteur

Faire l'exercice suivant avec le tuteur

Sans compte : le cours, le premier QCM, 2 minutes de podcast et de vidéo et un exercice avec le tuteur. Pour tout le reste : inscription gratuite en 30 secondes, sans carte bancaire.

Le cours du chapitre · Tous les exercices du chapitre

Exercice suivant avec le tuteur →