Mutable et Immutable en Python

Mutable et Immutable en Python

Cet article explique les notions de mutable et immutable en Python.

YouTube Video

Mutable et Immutable en Python

"Mutable" et "immutable" font référence à la mutabilité d’un objet. Comprendre cela permet d’éviter des bogues inattendus et d’optimiser la gestion de la mémoire.

Qu'est-ce qu'un objet mutable ?

Les objets mutables peuvent voir leur état interne changé après leur création.

Principaux types de données mutables

  • list
  • dict
  • set
  • Les classes définies par l'utilisateur (si leurs attributs peuvent être modifiés)

Exemple : Modifier une liste

1numbers = [1, 2, 3]
2numbers[0] = 100
3print(numbers)  # [100, 2, 3]

Une liste est un objet mutable et ses éléments peuvent être librement modifiés.

Qu'est-ce qu'un objet immutable ?

Les objets immutables ne peuvent pas être modifiés après leur création. Toute tentative de modification entraîne la création d’un nouvel objet.

Principaux types de données immutables

  • int
  • float
  • str
  • tuple
  • bool
  • frozenset

Exemple : Modifier une chaîne de caractères

1text = "hello"
2# text[0] = "H"  # TypeError: 'str' object does not support item assignment
3
4text = "H" + text[1:]  # Creates a new string
5print(text)  # "Hello"

Les chaînes de caractères sont immutables, donc vous ne pouvez pas les modifier partiellement.

Comparaison entre mutable et immutable

 1# Mutable example
 2a = [1, 2, 3]
 3b = a
 4b[0] = 100
 5print(a)  # [100, 2, 3] -> a is also changed
 6
 7# Immutable example
 8x = 10
 9y = x
10y = 20
11print(x)  # 10 -> x is unchanged

Comme montré dans l’exemple ci-dessus, les objets mutables sont partagés par référence, donc ils peuvent affecter d’autres variables. D'autre part, les objets immuables créent de nouvelles instances lors de l'affectation, laissant la valeur originale intacte.

Examiner le comportement interne à l'aide de id()

En Python, vous pouvez utiliser la fonction id() pour vérifier l'identifiant d'un objet. L'identifiant d'un objet est similaire à une adresse mémoire.

 1# Immutable int behavior
 2a = 10
 3print(id(a))  # e.g., 140715920176592
 4a += 1
 5print(id(a))  # e.g., 140715920176624 -> ID has changed
 6
 7# Mutable list behavior
 8b = [1, 2, 3]
 9print(id(b))  # e.g., 2819127951552
10b.append(4)
11print(id(b))  # Same ID -> only the content has changed

Comme indiqué, un nouvel objet est créé pour les types immuables, tandis que les types mutables sont modifiés sur place.

Fonctions et précautions avec les objets muables et immuables

Lorsqu'un objet muable est passé à une fonction, les données originales peuvent être modifiées.

Exemple : Une fonction qui modifie une liste

1def modify_list(lst):
2    lst.append(100)
3
4my_list = [1, 2, 3]
5modify_list(my_list)
6print(my_list)  # [1, 2, 3, 100]

Exemple : Une fonction qui modifie un nombre

En revanche, tenter de modifier un objet immuable entraîne la création d'un nouvel objet.

1def modify_number(n):
2    n += 10
3
4my_number = 5
5modify_number(my_number)
6print(my_number)  # 5 -> unchanged

Considérations pratiques

Évitez d'utiliser des objets muables comme arguments par défaut

 1# Bad example
 2def add_item(item, container=[]):
 3    container.append(item)
 4    return container
 5
 6print(add_item(1))  # [1]
 7print(add_item(2))  # [1, 2] -> unintended behavior
 8
 9# Good example
10def add_item(item, container=None):
11    if container is None:
12        container = []
13    container.append(item)
14    return container

Étant donné que les arguments par défaut sont évalués une seule fois lors de la définition de la fonction, l'utilisation d'objets muables peut entraîner des effets secondaires inattendus.

Résumé

Pour comprendre en profondeur les variables et les types de données en Python, il est crucial de saisir les différences entre muable et immuable. Comprendre ces caractéristiques vous aide à éviter les comportements indésirables dans votre code et à écrire des programmes plus robustes et lisibles.

Vous pouvez suivre l'article ci-dessus avec Visual Studio Code sur notre chaîne YouTube. Veuillez également consulter la chaîne YouTube.

YouTube Video