Objets mutables et immuables en Python {EXEMPLES}

Qu'est-ce qu'un objet mutable ?

Mutable en Python peut être défini comme un objet qui peut changer ou être considéré comme quelque chose de changeable par nature. Mutable signifie la possibilité de modifier ou d'éditer une valeur.

Les objets mutables en Python permettent aux programmeurs d'avoir des objets qui peuvent modifier leurs valeurs. Ils sont généralement utilisés pour stocker une collection de données. Cela peut être considéré comme quelque chose qui a muté et l’état interne applicable au sein d’un objet a changé.

Que sont les objets immuables ?

Les objets immuables en Python peuvent être définis comme des objets dont les valeurs et les attributs ne changent pas au fil du temps.
Ces objets deviennent permanents une fois créés et initialisés, et constituent un élément essentiel des structures de données utilisées en Python.

Python est utilisé en chiffres, tuples, chaînes, ensembles gelés et classes définies par l'utilisateur, à quelques exceptions près. Ils ne peuvent pas changer, et leurs valeurs restent permanentes une fois qu'elles sont initialisées et donc appelées immuables.

En Python, tout est un objet

Dans le langage de programmation Python, tout peut être considéré comme un objet comprenant des listes, des entiers et des fonctions. Cette fonctionnalité peut être comparée à d’autres langages de programmation prenant en charge les objets.

Cette fonctionnalité peut être vérifiée à l’aide d’un interpréteur Python comme indiqué ci-dessous : –

Code Python :

print("The following instance is an object:",isinstance(3,object))
print("Another instance for object", isinstance(True, object))
def my_func():
    return "guru99"
print("This is a function example and regarded as an object in Python:", isinstance(my_func, object))

Sortie :

A following instance is an object: True
Another instance for object True
This is a function example and regarded as an object in Python: True

De plus, Python fournit une fonction intégrée nommée id qui renvoie l'adresse de l'objet telle qu'elle est présente dans la mémoire du langage de programmation Python.

Code Python :

z=200
id(z)
print("The id of object is", id(z))

Sortie :

the id of object is 9795360

Dans le code ci-dessus, la fonction id ayant la syntaxe id(obj) donne l'adresse de obj dans la mémoire Python. Ici, il y a un objet nommé z, et il a une affectation de 200. L'objet z est ensuite transmis à la fonction id sous le nom id(z), et Python fournit l'adresse de l'objet sous la forme 9795360.

Objets mutables en Python

Dans un objet mutable, la valeur de l'objet change au fil du temps.

Dans cet exemple, nous avons expliqué les objets mutables en Python, et celui-ci utilise des listes comme application d'objets mutables, comme indiqué ci-dessous : –

Code Python :

mut_list = [1, 2, 3]
  print("The list in Python",mut_list)
mut_list[0] = 'Gurru99'
mut_list
  print("The list in Python after changing value",mut_list)

Sortie :

The list in Python [1, 2, 3]
The list in Python after changing value ['Gurru99', 2, 3]

Comme nous pouvons le voir dans l'exemple ci-dessus, la liste mutable en Python avait des valeurs de 1,2,3. Le premier élément de la liste mutable passe de 1 à Guru99, et il ne crée pas de nouvel objet lorsqu'une nouvelle valeur est initialisée.

Ici, nous pouvons utiliser la méthode id pour l'utiliser. Suivrewing illustre l'utilisation de la méthode id pour les objets mutables, comme indiqué ci-dessous : –

Code Python :

mut_list = [1, 2, 3]
print("The list in Python",mut_list)
print("the id of the list is ",id(mut_list))
mut_list[0] = 'Gurru99'
mut_list
print("The mut list in Python after changing value",mut_list)
print("the id of the list is post change in value",id(mut_list))

Sortie

The list in Python [1, 2, 3]
the id of the list is 139931568729600
The list in Python after changing value ['Gurru99', 2, 3]
the id of the list is post change in value 139931568729600

Le following la figure illustre l'objet mutable en Python comme indiqué ci-dessous : –

Objets mutables en Python

Objets immuables en Python

Les objets immuables en Python sont des objets dont les instances ne changent pas au cours de la période. Les instances immuables d'un type spécifique, une fois créées, ne changent pas, et cela peut être vérifié à l'aide de la méthode id de Python.

Prenons un exemple d'objets de type entier en Python qui illustre le concept d'objets immuables en Python comme indiqué ci-dessous : –

Code Python :

a=244
print("the number before change is",a)
print("the id of number before change is",id(a))
a=344
print("the number after change is",a)
print("the id of number after change is",id(a))

Sortie

the number before a change is 244
the id of number before change is 9796768
the number before change is 344
the id of number before change is 140032307887024

On a pu voir ci-dessus qu’il y a un changement dans « a ». Étudions le fonctionnement du mécanisme :

  • Il n'y a aucun changement dans la valeur de l'objet lors de l'initialisation de « a » avec 344.
  • Au lieu de cela, un nouvel objet est créé et est délimité par « a ».
  • L'autre objet attribué à 244 ne serait plus accessible.
  • L'exemple ci-dessus utilisait un objet entier.

À a=244, un nouvel objet est créé et référencé à « a » comme indiqué ci-dessous : –

Objets immuables en Python

Postez en utilisant a=344, il y a un nouvel objet référencé par « a ». Le suiviwing Le diagramme représente la même chose : –

Objets immuables en Python

Par conséquent, chaque fois qu’une nouvelle valeur est attribuée au nom de type int, la liaison du nom avec un autre objet change. Le même principe s'aligne avec les tuples, instruments à cordes, float et Boolean sont donc appelés immuables.

Implications pour les clés de dictionnaire en Python

Les dictionnaires peuvent être définis comme des collections ordonnées qui stockent les données au format clé et n'autorisent pas les doublons. Les dictionnaires contiennent une clé sur laquelle est alignée une paire de valeurs correspondante. Leur type est modifiable et leur contenu peut être modifié même après leur initialisation et leur création.

A tout moment, la clé pointe vers un élément précis à la fois. Les clés des dictionnaires sont immuables.

Prenons un scénario hypothétique comme indiqué ci-dessous : –

a = [4, 6]
b = [5, 6, 7]
my_dict = {a: 'x', b: 'y'}
print(my_dict)

Sortie : – Le code Python ci-dessus ne produit aucune sortie et génère à la place une erreur de type de type non hachable. Il s'agit d'une situation hypothétique et n'est pas utilisée dans le compilateur Python.

Ici, a est défini comme [4,6], et dans le dictionnaire, il est défini comme x. Ici, b est défini comme [5,6,7], et dans le dictionnaire, il est défini comme y.

  • La clé 'a' a la valeur de [4,6] et elle est en outre initialisée à x.
  • La clé « b » a la valeur de [5,6,7] qui est ensuite initialisée à « y » dans un dictionnaire.
  • Supposons maintenant que la valeur de 'a ' est suivi de 5 et 7, qui sont une clé pour le dictionnaire.
  • Ensuite, le dictionnaire a été muté, et il donnerait aux deux 'X' et «y» comme valeurs pour le dictionnaire ci-dessus.

Considérez ce qui suitwing scénario comme illustré ci-dessus : –

a = [5, 6,7]
b = [5, 6, 7]
my_dict = {a: 'x', b: 'y'}
print(my_dict)

Par conséquent, en tant que langage de programmation, Python rend les clés du dictionnaire immuables et les dictionnaires sont des types de données immuables.

Exceptions à l'immuabilité

Cependant, Python fournit des exceptions à l'immuabilité. De telles exceptions peuvent être observées pour le type d'objet tuple. Un tuple peut être une combinaison de types d'objets mutables et immuables. Prenons un exemple pour expliquer les exceptions à l'immuabilité comme indiqué ci-dessous : –

Code Python :

tupexample=([1,1],'guru99')
print("the tuple before change",tupexample)
print("the id of tuple before change",id(tupexample))
tupexample=([2,2],'guru99')
print("the tuple after change",tupexample)
print("the id of tuple after change",id(tupexample))

Sortie :

the tuple before change ([1, 1], 'guru99')
the id of tuple before change 140649480694656
the tuple after change ([2, 2], 'guru99')
the id of tuple after change 140649480694592

Vous pouvez voir dans le code ci-dessus que le premier élément, qui est une liste, est mutable, alors que le tuple est immuable. La valeur du tuple ne peut pas être modifiée, mais le contenu de la liste présente à l'intérieur du tuple peut changer sa valeur.

Par conséquent, cela soulève une exception selon laquelle les objets immuables ne changent pas leur valeur, mais la valeur des constituants change leur valeur.

Objets mutables ou immuables

Voici les principales différences entre les objets mutables et immuables :

Objet mutable Objet immuable
L'état de l'objet peut être modifié une fois créé L'état de l'objet ne peut pas être modifié une fois créé
Les objets mutables ne sont pas considérés comme étant de nature thread-safe. Les objets immuables sont considérés comme de nature thread-safe.
Les objets mutables ne sont pas rendus définitifs et le programmeur peut donc continuer à modifier les objets mutables et utiliser les mêmes objets. Il est essentiel de rendre les classes définitives lors de la création de l'objet immuable

Types de données immuables Python

Classe Explication Immuable ou pas
Bool Valeur booléenne Immuable
Int Valeur entière (la grandeur peut être arbitraire) Immuable
flotteur Nombre à virgule flottante Immuable
Liste Séquence d'objets de nature mutable Mutable
tuple Séquence d'objets de nature immuable Immuable
Str Chaîne de caractères Immuable
Ensemble ensemble d'objets distincts qui sont de nature non ordonnée Mutable
Ensemble congelé Définir une classe de nature immuable Immuable
Dict Dictionnaire ou cartographie associative Mutable