[Python] Pourquoi les types int immuables de haze peuvent être modifiés en différentes valeurs

Conclusion d'abord

Si vous affectez une valeur différente à une variable de type int, l'emplacement de stockage changera. En d'autres termes, la valeur de la variable de type int ne peut pas être modifiée lors de l'utilisation de la même adresse. (Inversement, la liste mutable peut le faire)

Raison de la rédaction de l'article

Il existe déjà de nombreux articles qui abordent le comportement de mutable / immuable. Cependant, si un débutant en python recherche une question comme cet article tel quel, je pensais que ce serait comme "python int immuable peut être changé", alors je l'ai créé pour que je puisse trouver les informations que je veux par cette méthode de recherche.

Qu'est-ce qui est mutable / immuable?

(Il existe de nombreux articles faciles à comprendre pour des descriptions détaillées, veuillez donc les consulter.)

--mutable: types dont les valeurs peuvent être modifiées après la définition de variable (liste, dict, etc.) --immutable: types immuables (int, str, etc.)

Question

On dit qu'il ne peut pas être changé, mais vous pouvez le réaffecter après avoir défini à la fois int et str!

#Définir une fois
var_int = 2
#Vous pouvez le réaffecter!
var_int = 5

Ce qui se passe réellement

Utilisez la fonction id installée en python pour vérifier l'id (adresse) de la variable. Environnement d'utilisation: python 3.8.3, notebook jupyter

#Remplacez la variable a par le nombre de type int 3
a = 3
# id()Obtenez l'adresse de la variable a en utilisant
id(a)
# out: 4500765184

Comme vous pouvez le voir, l'id de la variable a est 4500765184. Ensuite, changeons la valeur.

#Remplacez la variable a par le nombre de type int 2
a = 2 #Vous pouvez le changer!
# id()Obtenez l'adresse de la variable a en utilisant
id(a)
# out: 4500765216
#Si vous pensez, l'identifiant a changé!

De cette façon, vous pouvez modifier la valeur de la même variable au premier coup d'œil, il semble donc qu'elle n'est pas immuable. Cependant, si vous vérifiez l'id, vous pouvez voir que l'id a été changé même avec le même nom de variable.

En d'autres termes, si vous réaffectez la valeur int au même nom de variable, elle sera stockée dans la nouvelle adresse! Puisque la valeur de l'adresse d'origine ne peut pas être modifiée, elle est immuable.

Un peu plus sur l'identité

(Pour ceux qui sont intéressés car j'ai déjà terminé ce que je veux transmettre dans l'article) Si vous vérifiez docs about python id,

Return the “identity” of an object. This is an integer which is guaranteed to be unique and constant for this object during its lifetime. Two objects with non-overlapping lifetimes may have the same id() value.

CPython implementation detail: This is the address of the object in memory.

Est écrit. En particulier, dans le cas de CPython, il est écrit qu'il représente une adresse mémoire.

La plupart des Python que nous utilisons actuellement sont basés sur l'implémentation appelée CPython, donc fondamentalement, vous pouvez considérer l'id comme l'adresse mémoire.

Premièrement, un objet est comme une boîte contenant des variables. Alternativement, il peut être plus facile de comprendre l'adresse où la variable est stockée. Puisque le programme fonctionne sur un ordinateur, «quelle valeur» et «où se souvenir» sont nécessaires. L'objet est considéré comme un groupe de ceux-ci.

Ensuite, si vous réaffectez la valeur à une variable immuable, un objet différent sera créé. En d'autres termes, une adresse différente sera sécurisée et une nouvelle valeur sera stockée.

À la fin

Je me suis souvenu des questions que j'avais quand j'étais débutant, alors je les ai résumées. Pour être honnête, il peut être rare de se soucier de l'emplacement de stockage des variables en python, mais j'espère que cela aidera à résoudre la question. Si vous avez des erreurs, je vous serais reconnaissant de bien vouloir m'apprendre!

Recommended Posts

[Python] Pourquoi les types int immuables de haze peuvent être modifiés en différentes valeurs
Assurez-vous que python peut convertir / convertir une chaîne de caractères en int
Seuls les tableaux de taille 1 peuvent être convertis en scalaires Python
Mémo int de type immuable Python
Nouvelles fonctionnalités de Python 3.9 (1) -L'opérateur d'ensemble de somme peut être utilisé dans le type de dictionnaire.
[Python] Comment permuter les valeurs de tableau
[Raspberry Pi] Changement par défaut de Python en Python3