Objets mutables et immuables dans Python

โšก Rรฉsumรฉ intelligent

Objets mutables et immuables dans Python Leur diffรฉrence rรฉside dans la possibilitรฉ que leur รฉtat change aprรจs leur crรฉation. Les types mutables, comme les listes et les dictionnaires, sont modifiรฉs sur place, tandis que les types immuables, comme les chaรฎnes de caractรจres et les tuples, ne le sont pas.

  • (I.e. Dรฉfinition: Un objet mutable peut modifier sa valeur ultรฉrieurement, tandis qu'un objet immuable ne le peut plus une fois crรฉรฉ.
  • โ˜‘๏ธ Types mutables : Les listes, les dictionnaires et les ensembles peuvent รชtre modifiรฉs aprรจs leur crรฉation sans qu'un nouvel objet soit gรฉnรฉrรฉ.
  • โœ… Types immuables : Les entiers, les nombres ร  virgule flottante, les boolรฉens, les chaรฎnes de caractรจres, les tuples et les ensembles figรฉs conservent une valeur fixe une fois initialisรฉs.
  • (I.e. Clรฉs du dictionnaire : Seuls les objets immuables et hachables peuvent servir de clรฉs, ce qui garantit la fiabilitรฉ des recherches.
  • ๐Ÿค– Pertinence de l'IA : Les tableaux et tenseurs d'apprentissage automatique sont mutables, donc tracLes modifications sur place de King protรจgent la reproductibilitรฉ.

Mutable et immuable dans Python

Qu'est-ce qu'un objet mutable ?

Mutable dans Python peut รชtre dรฉfini comme l'objet qui peut changer ou รชtre considรฉrรฉ comme quelque chose de nature changeante. Mutable signifie la possibilitรฉ de modifier ou d'รฉditer une valeur.

Objets mutables dans Python permettre aux programmeurs d'avoir des objets qui peuvent changer 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 ?

Objets immuables dans Python On peut les dรฉfinir comme des objets dont les valeurs et les attributs restent inchangรฉs au fil du temps. Ces objets deviennent permanents une fois crรฉรฉs et initialisรฉs, et ils constituent un รฉlรฉment essentiel des structures de donnรฉes utilisรฉes dans Python.

Python est utilisรฉ dans les nombres, 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.

In Python, tout est objet

Dans l' Python langage de programmation, 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 Python interprรจte comme indiquรฉ ci-dessous : โ€“

Python code:

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

Par ailleurs, les 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 Python langage de programmation.

Python code:

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 Python mรฉmoire. Ici, il y a un objet nommรฉ z, et il a une affectation de 200. L'objet z est ensuite passรฉ dans la fonction id sous le nom id(z), et le Python fournit l'adresse de l'objet sous la forme 9795360.

Objets mutables dans Python

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

Dans cet exemple, nous avons expliquรฉ les objets mutables dans Python, et cela utilise des listes comme application d'objets mutables comme indiquรฉ ci-dessous : โ€“

Python Code:

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 dans Python Les valeurs initiales รฉtaient 1, 2 et 3. Le premier รฉlรฉment de la liste modifiable passe de 1 ร  3. 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. Ce qui suit illustre l'utilisation de la mรฉthode id pour les objets mutables, comme indiquรฉ ci-dessous : โ€“

Python Code:

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

La figure suivante illustre l'objet mutable dans Python comme indiquรฉ ci-dessous : โ€“

Objets mutables dans Python

Objets immuables dans Python

Objets immuables dans 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 dans Python qui illustre le concept d'objets immuables dans Python comme indiquรฉ ci-dessous : โ€“

Python Code:

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 dans Python

Postez en utilisant a=344, il y a un nouvel objet rรฉfรฉrencรฉ par ยซ a ยป. Le diagramme suivant reprรฉsente la mรชme chose : โ€“

Objets immuables dans 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 dans 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 : โ€“ Ce qui prรฉcรจde Python le code ne donne 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 Python compilateur.

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 le scรฉnario suivant comme illustrรฉ ci-dessus : โ€“

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

Ainsi, 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รฉ

Toutefois, 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 : โ€“

Python Code:

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

Python Types de donnรฉes immuables

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
complet ยป ensemble d'objets distincts qui sont de nature non ordonnรฉe Mutable
Ensemble congelรฉ Dรฉfinir une classe de nature immuable Immuable
Dict Carte associative ou dictionnaireping Mutable

FAQ

Les chaรฎnes de caractรจres sont immuables ; leur hachage reste donc constant et elles fonctionnent comme clรฉs de dictionnaire ou รฉlรฉments dโ€™ensemble. Les mรฉthodes telles que `replace()` ou `upper()` renvoient une nouvelle chaรฎne au lieu de modifier lโ€™originale.

Les tuples sont immuables, donc Python On peut les hacher pour obtenir des clรฉs de dictionnaire et protรฉger les donnรฉes fixes contre toute modification accidentelle. Les listes restent modifiables car elles sont conรงues pour des collections qui s'agrandissent ou se rรฉduisent.

Une valeur par dรฉfaut modifiable telle que def f(x, items=[]) est risquรฉe : Python Cette fonction crรฉe la liste une seule fois, elle est donc conservรฉe d'un appel ร  l'autre. Utilisez `items=None`, puis assignez `items=[]` ร  l'intรฉrieur de la fonction.

Utilisez le module copy : copy.copy() crรฉe une copie superficielle qui partage les objets imbriquรฉs, tandis que copy.deepcopy() duplique chaque niveau. Slicer ou list(original) produisent รฉgalement une copie superficielle.

Un frozenset est la version immuable d'un ensemble. Il ne peut ni gagner ni perdre d'รฉlรฉments ; il est donc hachable et peut servir de clรฉ de dictionnaire ou d'รฉlรฉment d'ensemble.

Les objets immuables sont hachables ; ils peuvent donc servir de clรฉs de dictionnaire et dโ€™รฉlรฉments dโ€™ensemble. Ils sont sรปrs pour les threads, plus faciles ร  manipuler et permettent des optimisations comme lโ€™internement des petits entiers.

La science des donnรฉes repose sur des structures mutables : tableaux NumPy, DataFrames pandas et Py.TorLes tenseurs ch sont modifiรฉs sur place pour des raisons de rapiditรฉ. ร‰tant donnรฉ que les pipelines d'IA les partagent, track modifications sur place pour rester reproductibles.

Oui. GitHub Copilot et les assistants IA signalent les arguments par dรฉfaut modifiables, suggรจrent deepcopy et recommandent les tuples ou les frozensets pour les donnรฉes constantes. RevExaminez leur rรฉsultat, car les suggestions peuvent passer ร  cรดtรฉ de bugs subtils de mutation sur place.

Rรฉsumez cet article avec :