Aller au contenu

Les objet de type list sont muables

Convention

En Python, les éléments de type list sont ce qui s'approche le plus de la notion abstraite de « tableau ».

Dans la suite du cours, on utilisera le mot « liste Python » pour désigner les deux, c'est-à-dire les objets de type list ainsi que le type abstrait de données « tableau ».

Contrairement aux chaînes de caractères (et aux tuples - nous le verrons plus tard), les listes Python sont muables. Cela signifie que l'on peut changer un élément du tableau sans changer l'objet de type list.

Pour constater que le tableau (le conteneur) n'est pas modifié même lorsque le contenu est modifié, on peut à nouveau utiliser la fonction id() qui renvoie l'identifiant d'un objet python (sur votre machine, le numéro d'identifiant sera différent de celui de cet exemple mais les valeurs renvoyées par les appels id(tab) doivent être les mêmes) :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
>>> tab = [3, 4, 5, 6]

>>> id(tab)
139779891177608

>>> tab[1] = 42

>>> tab
[3, 42, 5, 6]

>>> id(tab)
139779891177608

On constate que l'objet de type list reste le même après avoir modifié la valeur de l'un de ses éléments (son contenu a bien sûr changé). On peut interprêter la ligne 1 par le schéma suivant :

En ligne 6, lorsqu'on modifie la valeur de l'élément d'indice 1, aucun nouvel objet n'est créé : c'est vraiment l'objet initial qui est modifié :

Vous pouvez aussi visualiser ce comportement sur le site Python tutor.

Interprétation

On peut voir l'objet conteneur (tableau, chaîne, tuple) comme une bouteille :

  • Si la bouteille est une chaîne (ou un tuple), on voit ce qu'il y a dans la bouteille mais elle est bien scellée et il est impossible d'en modifier son contenu. Pour avoir un autre contenu, on doit remplir une autre bouteille.
  • Si la bouteille est un tableau (type list), on peut voir ce qu'il y a dans la bouteille et la bouteille reste ouverte : on peut modifier une partie de son contenu, ou ajouter du contenu ou encore enlever du contenu.