Bei der folgenden Beschreibung scheinen a und b auf genau dasselbe Objekt zu zeigen (in diesem Fall 2).
a = 2
b = 2
Genauso. * "Das gleiche Objekt" * auf Englisch. Ich hatte viele Fragen, also habe ich nachgeschlagen. Lassen Sie uns zunächst die Fragen auflisten.
Wenn Sie sorgfältig darüber nachdenken, habe ich dies in [dem vorherigen Artikel] nachgeschlagen (http://qiita.com/KanChin/items/58307237c6148ec3f4ba).
Kurz zusammengefasst
Wenn genau das gleiche Objekt bereits vorhanden ist
Beziehen Sie sich auf dasselbe Objekt, um Speicherplatz zu sparen.
Wenn dasselbe Objekt nicht vorhanden ist, wird es neu erstellt.
Mit anderen Worten, wenn `a = 3``` neu eingegeben wird, wird ein neues Objekt erstellt. Und wird
`b = 2``` so gespeichert, wie es ist?
Natürlich, da es sich um ein Memo-Schreiben für Anfänger handelt, können im grundlegenden Teil kompliziertere Dinge passieren, aber da diese Definition konsistent erklärt werden kann, werde ich vorerst so weitermachen, wie es ist.
Um festzustellen, ob dies der Fall ist, überprüfen Sie mithilfe der ID-Funktion, die Sie direkt sehen können, die so genannte Speicherplatzadresse.
Wie Sie anhand von id () sehen können, wird anscheinend der Identifikationswert als Rückgabewert verwendet. Mit anderen Worten, wenn sie auf dasselbe Objekt zeigen, ist der Rückgabewert derselbe, und wenn sie unterschiedlich sind, ist auch der Rückgabewert unterschiedlich.
Nun wollen wir herausfinden, ob es wirklich zu *** zusammen *** gehört.
test.py
a = 2
b = 2
id(a) #4401166416
id(b) #4401166416
id(a) == id(b) #Richtig, es ist mühsam, die Zahlen zu sehen==Ich habe es versucht.
Anscheinend ist es wahrscheinlich. Mit anderen Worten, die Regeln beim Erstellen eines neuen Objekts lauten wie folgt.
Kan Chin war immer noch misstrauisch und definierte ein neues `` `c = 3``` und versuchte es mit einem anderen Experiment.
test.py
c = 3
id(c) #4401166448
id(a) == id(c) #False
#Schreiben Sie danach a bis 3 neu und prüfen Sie, ob es mit c identisch ist.
a = 3
id(a) #4401166448
id(a) == id(c) #True
Und wurde wunderbar zusammen. Mit anderen Worten
Wenn das gleiche Objekt existiert
Es wird kein neues Objekt erstellt.
Es sieht aus wie. (* Einige Korrekturen wurden im Postscript vorgenommen)
Ich weiß nicht, wofür es nützlich ist, aber der Inhalt ist seltsam und interessant.
Eine solche Entwurfsmethode wird als Flyweight-Muster bezeichnet (sie ist "Fly Grade", da sie weniger Speicher benötigt). Als Referenz.
... anscheinend ... Vielen Dank.
Wenn der Wert groß ist, wird anscheinend ein neues Objekt erstellt, auch wenn der Wert genau gleich ist.
Folgendes habe ich versucht.
test
d = 50000
e = 50000
id(d) #4406088592
id(e) #4404350832
id(d) == id(e) #False
Es ist überraschend interessant zu sehen, wie der Inhalt des Systems gespeichert wird.
Recommended Posts