Maison >développement back-end >Tutoriel Python >Analyse détaillée des objets mutables et immuables Python

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

coldplay.xixi
coldplay.xixiavant
2020-07-09 17:35:012813parcourir

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

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

À 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

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

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

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

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

>>> id(c)==id(b)
True

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)}')

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)}')

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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer