Analyse détaillée des objets mutables et immuables Python

coldplay.xixi
Libérer: 2020-07-09 17:59:21
avant
2780 Les gens l'ont consulté

Analyse détaillée des objets mutables et immuables Python

Tout en Python peut être considéré comme un objet. Chaque objet a son propre identifiant, son type et sa valeur.

  1. id : Lorsqu'un objet est créé, son identifiant ne changera pas. L'identifiant ici est en fait l'adresse de l'objet en mémoire. Vous pouvez utiliser id() pour afficher l'adresse de l'objet en mémoire. .
  2. type : Comme id, une fois qu'un objet est créé, son type ne peut pas être modifié. Le type détermine les opérations que l'objet peut prendre en charge.
  3. value : La valeur de l'objet
    .

Le fait qu'un objet soit mutable ou non dépend du fait que la valeur prenne en charge les modifications.

Recommandations d'apprentissage associées : Tutoriel vidéo Python

Objets immuables

Objet d'immuabilité commune (immuable objets):

  1. Nombre : int, float, complexe
  2. string
  3. tuple
  4. figé : un autre type d'ensemble

Ressentons-le à travers un exemple

Exemple

>>> x=1
>>> y=x
>>> id(x)==id(y)
True
>>> id(1)==id(y)
True
Copier après la connexion

Ici, deux objets int sont créés, et laissez x, y pointe vers le même objet, puis nous essayons de modifier x pour que x+1

>>>x=x+1
Copier après la connexion

À ce moment, la valeur id de x est toujours la même que l'identifiant de y et l'identifiant de 1 ?

>>> x=x+1
>>> id(x)==id(y)
False
>>> id(x)==id(1)
False
>>> id(1)==id(y)
True
Copier après la connexion

Il n'est pas difficile de voir à partir des résultats que l'objet pointé par x a changé, mais 1 n'a pas changé. Il s'agit d'un objet immuable. Pour les objets immuables, une fois créés, ils ne peuvent pas être modifiés.

Remarque : l'immuabilité n'est pas strictement équivalente à l'immuabilité absolue

>>> a=([1],2,3)
>>> id(a)
4338862696
>>> id(a[0])
4338949128
>>> a[0][0]=0
>>> id(a)
4338862696
>>> id(a[0])
4338949128
Copier après la connexion

Il n'est pas difficile de voir à partir de l'exemple ci-dessus que nous avons modifié la valeur de a[0], mais cela n'a pas affecté sa valeur d'identification. Si un objet conteneur immuable contient une référence à un objet mutable, lorsque la valeur de ce dernier change, la valeur du premier changera également mais le conteneur est toujours un objet immuable car sa valeur d'identifiant ne changera pas ;

Objets mutables

Objets mutables communs :

  1. list
  2. dict
  3. set

Expérimentez-le de la même manière à travers des exemples

Exemple

>>> c = [1,2,3]
>>> b = c
>>> id(b)==id(c)
True
Copier après la connexion

Créez deux objets de liste et laissez c, d pointer vers le même objet , puis nous essayons de modifier c

c[0]=4
Copier après la connexion

A ce moment, vérifiez si les valeurs d'identifiant des deux objets sont cohérentes

>>> id(c)==id(b)
True
Copier après la connexion

Après modification, c, d pointe toujours vers le même objet, il n'est donc pas difficile de conclure que pour un objet mutable, la modification de la valeur n'aura aucun impact sur son identifiant

Paramètres de fonction

Pour les objets mutables et objets immuables, ils se comportent différemment lorsque les fonctions sont passées en paramètres

Exemple

eg0

def update_list(nums_list):
  print(f'2 id:{id(nums_list)}')
  nums_list += [10]
  print(f'3 id:{id(nums_list)}')

  
number_list = [5, 6]
print(f'1:{number_list}, id:{id(number_list)}')   
update_list(number_list)
print(f'4:{number_list}, id:{id(number_list)}')
Copier après la connexion

Regardez les résultats

1:[5, 6], id:4457707912
2 id:4457707912
3 id:4457707912
4:[5, 6, 10], id :4457707912

En regardant un autre exemple

eg1

def add_num(number):
  print(f'2:{id(number)}')
  number += 1
  print(f'3:{id(number)}')


num = 1
print(f'1:{num}, id:{id(num)}')   
add_num(num)
print(f'4:{num}, id:{id(num)}')
Copier après la connexion

En regardant voici les résultats

1 :1, id:4343768416
2 id:4343768416
3 id:4343768448
4:1, id:4343768416

Dans certains autres articles, eg0 ci-dessus est appelé passer par référence, et eg1 est appelé passage par valeur. Cependant, dans les documents officiels, aucun contenu lié à ces deux termes n'a été trouvé, ou cette méthode n'est aucune des deux ci-dessus.

Le point clé ici est : Pour les objets mutables, les modifications de la valeur dans la fonction entraîneront une modification de l'objet ; pour les objets immuables, les modifications de la valeur dans la fonction n'entraîneront aucune modification. l'objet.Impact

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:jb51.net
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal