Variables Python et ID d'objet

introduction

Ceci est l'article sur le 21ème jour de Inatatsu Adcare.

Aujourd'hui, parlons des ID d'objet Python et des variables ~~ passer par référence ~~.

Je suis une personne qui n'utilise pas très souvent Python, donc si vous faites une erreur, veuillez la corriger. .. .. .. .. ..

Python's Tips

--Python est tout un objet --Chaque objet a un ID d'objet

Vérifiez l'ID de l'objet

test.py


num1 = 1
num2 = 2
print(id(1)) # 1
print(id(num1)) # 1

print(id(1 + 1)) # 2
print(id(num1 + 1)) # 2
print(id(num2)) # 2

J'ai essayé d'obtenir les ID 1 et 2 de différentes manières.

$ python test.py
140280906740832
140280906740832
140280906740864
140280906740864
140280906740864

La sortie ressemble à ceci. Essayez de l'exécuter à nouveau.

$ python test.py

140040431375456
140040431375456
140040431375488
140040431375488
140040431375488

Les identifiants 1, 1, 2, 2, 2 sont sortis dans l'ordre à partir du haut, mais les valeurs émises au premier et au second temps sont différentes. Et les ID d'objet de 1 et num1 sont les mêmes. À partir de là, on peut voir que l'ID objet de Python est déterminé dynamiquement et que l'ID objet de la variable contenant 1 et 1 est commun.

Ensuite, c'est la prochaine expérience.

test2.py


num1 = 1
num2 = 2
print(id(1))
print(id(num1))

num1 += 1

print(id(num1))
print(id(num2))

Résultat d'exécution

$ python test2.py
140413757891680
140413757891680
140413757891712
140413757891712

Num1 est passé de 1 à 2 entre le 2ème et le 3ème, et l'ID de l'objet a également changé ici.

Prochaine expérience

test3.py


num = 1
list = [1]

print(num)
print(id(num))

num = 2
print(num)
print(id(num))

print(list)
print(id(list))

list[0] = 2

print(list)
print(id(list))

Résultat d'exécution

$ python test3.py
1
140609807909984
2
140609807910016
[1]
140609798595120
[2]
140609798595120

Oui, l'ID d'objet change lorsque le nombre passe de 1 à 2, mais l'ID d'objet ne change pas dans la liste même si la valeur à l'intérieur change.

Passer à la fonction

test4.py


number_list = [1,2,3,4,5,6,7,8,9,10]

def show (arg):
    print(arg)
    print(id(arg))


def update_list (arg):
    arg[0] = 0

print(id(number_list))
show(number_list)
update_list(number_list)
show(number_list)

Résultat d'exécution

$ python test4.py
140048610816560
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
140048610816560
[0, 2, 3, 4, 5, 6, 7, 8, 9, 10]
140048610816560

Vous pouvez voir que l'ID d'objet n'a pas changé même si vous le transmettez à la fonction ou réécrivez le contenu.

Résumé

Python passe ~~ par référence ~~ L'ID d'objet est passé, et les valeurs immuables telles que les nombres ont des ID d'objet uniques ~~, donc si vous réécrivez la valeur dans la fonction, l'ID d'objet référencé changera. , Bien qu'il passe une référence, il se comporte comme une valeur réelle. ~~ Vous ne pouvez affecter qu'à une variable, et l'affectation d'une variable affectera un autre ID d'objet, ce qui n'affectera pas l'objet appelant. La modification de l'état interne d'un objet modifiable tel qu'une liste ne modifie pas l'ID d'objet de la liste elle-même, de sorte que les modifications à l'intérieur de la fonction affectent les variables et les objets avec le même ID d'objet. Bien sûr, si vous affectez une autre liste à une variable, elle aura un ID d'objet différent et n'affectera pas les objets externes.

Recommended Posts

Variables Python et ID d'objet
Python: variables de classe et d'instance
À propos des variables et des objets Python
[Python] Variables
Objet intégré Python
Objet intégré Python
Variables Python et types de données appris avec la chimio-automatique
J'ai essayé la détection d'objets en utilisant Python et OpenCV
[python] Différence entre variable et self. Variable dans la classe
[Python] Chapitre 02-01 Bases des programmes Python (opérations et variables)
Problème avec les variables pseudo-privées Python et l'héritage de classe
[python] Compresser et décompresser
Variables de numérotation des mémorandums Python
Astuces Python et Numpy
Variables globales et locales 2
[Python] pip et roue
Itérateur et générateur Python
Paquets et modules Python
Intégration Vue-Cli et Python
Ruby, Python et carte
entrée et sortie python
Python et Ruby se séparent
Orienté objet en python
À propos de Python3 ... (objet Ellipsis)
Python asyncio et ContextVar
Variables globales et locales 1
Premiers pas avec python3 # 2 En savoir plus sur les types et les variables
Différence entre Ruby et Python en termes de variables
[Python] Démarrez un fichier de commandes à partir de Python et passez des variables.
Programmation avec Python et Tkinter
Chiffrement et déchiffrement avec Python
3-3, chaîne Python et code de caractère
Série Python 2 et série 3 (édition Anaconda)
Python et matériel - Utilisation de RS232C avec Python -
Python sur Ruby et Ruby en colère sur Python
Indentation Python et format de chaîne
Installez Python et Flask (Windows 10)
À propos des objets et des classes Python
[python] Valeur de l'objet fonction (?)
Apache mod_auth_tkt et Python AuthTkt
Å (Ongustorome) et NFC @ Python
Comparaison d'objets nuls en Python
Apprenez à connaître les packages et les modules Python
[Python] Comment jouer avec les variables de classe avec décorateur et métaclasse
notes python pour l'utilisation de variables spéciales perl
# 2 [python3] Séparation et commentaire
Copie superficielle Python et copie profonde
Mémo tranche python et rubis
Gérer les variables d'environnement en Python
Installation de Python et grammaire de base
J'ai comparé Java et Python!
Copie superficielle Python et copie profonde
Ordre de référence des variables de classe et des variables d'instance dans "self. Variables de classe" en Python
Afficher les nombres et les caractères affectés aux variables dans l'impression python
# 1 [python3] Calcul simple à l'aide de variables
À propos de Python, len () et randint ()