Dies ist der Artikel am 21. Tag von Inatatsu Adcare.
Lassen Sie uns heute über Python-Objekt-IDs und ~~ Referenzvariablen ~~ sprechen.
Ich bin eine Person, die Python nicht sehr oft verwendet. Wenn Sie also einen Fehler machen, korrigieren Sie ihn bitte. .. .. .. .. ..
Python's Tips
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
Ich habe versucht, die IDs 1 und 2 auf verschiedene Arten zu erhalten.
$ python test.py
140280906740832
140280906740832
140280906740864
140280906740864
140280906740864
Die Ausgabe sieht so aus. Versuchen Sie es erneut.
$ python test.py
140040431375456
140040431375456
140040431375488
140040431375488
140040431375488
Die IDs 1,1,2,2,2 werden in der Reihenfolge von oben ausgegeben, aber die beim ersten und zweiten Mal ausgegebenen Werte sind unterschiedlich. Und die Objekt-IDs von 1 und num1 sind gleich. Daraus ist ersichtlich, dass die Objekt-ID von Python dynamisch bestimmt wird und dass die Objekt-ID der Variablen, die 1 und 1 enthält, gemeinsam ist.
Dann ist es das nächste Experiment.
test2.py
num1 = 1
num2 = 2
print(id(1))
print(id(num1))
num1 += 1
print(id(num1))
print(id(num2))
Ausführungsergebnis
$ python test2.py
140413757891680
140413757891680
140413757891712
140413757891712
Num1 hat sich zwischen dem 2. und 3. von 1 auf 2 geändert, und auch hier hat sich die Objekt-ID geändert.
Nächstes Experiment
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))
Ausführungsergebnis
$ python test3.py
1
140609807909984
2
140609807910016
[1]
140609798595120
[2]
140609798595120
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)
Ausführungsergebnis
$ 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
Sie können sehen, dass sich die Objekt-ID nicht geändert hat, auch wenn Sie sie an die Funktion übergeben oder den Inhalt neu schreiben.
Python übergibt ~~ als Referenz ~~ Die Objekt-ID wird übergeben, und unveränderliche Werte wie Zahlen haben eindeutige Objekt-IDs ~~. Wenn Sie also den Wert innerhalb der Funktion neu schreiben, ändert sich die referenzierte Objekt-ID. Obwohl es eine Referenz übergibt, verhält es sich wie das Übergeben eines realen Werts. ~~ Sie können nur einer Variablen zuweisen, und das Zuweisen einer Variablen weist eine andere Objekt-ID zu, die das aufrufende Objekt nicht beeinflusst. Durch Ändern des internen Status eines veränderlichen Objekts, z. B. einer Liste, wird die Objekt-ID der Liste selbst nicht geändert. Änderungen innerhalb der Funktion wirken sich daher auf Variablen und Objekte mit derselben Objekt-ID aus. Wenn Sie einer Variablen eine andere Liste zuweisen, hat diese natürlich eine andere Objekt-ID und wirkt sich nicht auf externe Objekte aus.
Recommended Posts