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
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.
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.
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