Les nombres sont des types immuables tout comme les chaînes de caractères et les tuples.
Une variable de type immuable ne peut être modifiée. Une opération sur une variable de ce type entraîne nécessairement la création d’une autre variable du même type.
Pour mettre en évidence cette propriété, jouons avec la fonction id() qui renvoie l'identificateur unique d'un objet, cela correspond à l'adresse mémoire dans laquelle il est stocké.
Si l'identifiant est le même, c'est le même objet.
Vous allez vérifier cela dans la Console Python (interpréteur Python en mode interactif)
>>> a = 1
>>> id(a)
>>> a += 2
>>> print(a)
>>> id(a)
>>> b = a
>>> id(b)
Donner plusieurs noms à un même objet s'appelle l'aliasing, les variables a et b sont des alias l'une de l'autre. a et b pointent vers le même emplacement mémoire
>>> b = 5
>>> a
>>> b
>>> id(a)
>>> id(a)
Conclusion, l'aliasing se fait sans risque.
Un objet de type mutable peut être modifié et modifié in situ. Aucune copie implicite n'est faite.
Cette catégorie comprend: les listes, les dictionnaires, ...
>>> liste1 = []
>>> id(liste1)
>>> liste1.append('Nicolas')
>>> liste1
>>> id(liste1)
La valeur de liste peut être modifié mais liste ne change pas d'id.
Si un objet doit être souvent modifié, un type mutable est préférable qu'un type immuable d'un point de vue espace mémoire mais attention à l'aliasing par exemple:
>>> liste2 = liste1
>>> id(liste2)
>>> liste2.append(3)
>>> liste2
>>> liste1
Créé avec HelpNDoc Personal Edition: Générateur de documentation complet