Ich war überrascht, wie man Objekte mit Python speichert, was schlank und sehr energiesparend ist.

Überraschte Geschichte

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.

  1. Wenn Sie auf denselben Ort zeigen und a ändern, ändert sich auch b?
  2. Ist das wahr?

Frage 1: Wird es nicht umgeschrieben?

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.

Frage 2: Überprüfen Sie, ob es wahr ist (Verwendung der ID-Funktion)

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.

Nachtrag

Von yuba

Eine solche Entwurfsmethode wird als Flyweight-Muster bezeichnet (sie ist "Fly Grade", da sie weniger Speicher benötigt). Als Referenz.

... anscheinend ... Vielen Dank.

shiracamus hat den Kommentar korrigiert.

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

Ich war überrascht, wie man Objekte mit Python speichert, was schlank und sehr energiesparend ist.
Verwendung ist und == in Python
Drei Dinge, von denen ich süchtig war, als ich Python und MySQL mit Docker verwendete
[Python] So speichern Sie Bilder mit Beautiful Soup sofort im Web
Python> set> Mit set () konvertieren> Wörterbuch wird nur Schlüssel> Ich habe gelernt, wie man die Werte des Wörterbuchs in set / dir ({}) / help ({}) / help ({}) konvertiert .Werte)
Ich habe versucht, mit VOICEROID2 2 automatisch zu lesen und zu speichern
Ich möchte die Optimierung mit Python und CPlex behandeln
Ich habe versucht, mit VOICEROID2 automatisch zu lesen und zu speichern
Ich war überrascht, wie der ternäre Operator von Python funktioniert
Ich war süchtig danach, 2020 mit Selen (+ Python) zu kratzen
Ich war überrascht, eine nette Rezension zu erhalten, als ich Python an CheckIO und seine Erklärung schrieb
[Python] Was ist ein Tupel? Erklärt, wie man es benutzt und wie man es benutzt, ohne zu tippen.
Ich habe versucht zu simulieren, wie sich die Infektion mit Python ausbreitet
[Python] Wie man mit Klassenvariablen mit Dekorator und Metaklasse spielt
Wie man mit Pythons Selen in Sekundenschnelle kratzt
Ich habe versucht, die Benutzeroberfläche neben Python und Tkinter dreiäugig zu gestalten
So melden Sie sich mit Python bei AtCoder an und senden automatisch
Führen Sie Jupyter mit der REST-API aus, um Python-Code zu extrahieren und zu speichern
Ich möchte APG4b mit Python lösen (nur 4.01 und 4.04 in Kapitel 4)
So importieren Sie CSV- und TSV-Dateien mit Python in SQLite
Was ich mit json.dumps in Pythons base64-Codierung süchtig gemacht habe
So erstellen Sie eine Überwachungskamera (Überwachungskamera) mit Opencv und Python
Ich habe versucht, mit Selenium und Python einen regelmäßigen Ausführungsprozess durchzuführen
Ich habe versucht herauszufinden, ob ReDoS mit Python möglich ist
Umgang mit Fehlern bei der Installation von Python und Pip mit Choco
Ich war süchtig nach falschen Klassenvariablen und Instanzvariablen in Python
Verwendung von Python mit Jw_cad (Teil 1 Was ist externe Transformation)
So erstellen Sie eine Python- und Jupyter-Ausführungsumgebung mit VSCode
Python: So verwenden Sie Async mit
Erste Schritte mit Python
Ich habe mit PyQt5 und Python3 gespielt
So berechnen Sie das Datum mit Python
Ich möchte mit Python debuggen
Das 16. Offline-Echtzeit-Schreibproblem wurde mit Python gelöst
Mit PEP8 und PEP257 ist es nicht peinlich, Python-Codierung zu zeigen!
[Einführung in Python] So beurteilen Sie die Authentizität mit der if-Anweisung (True und None)
Wie man offline in Echtzeit schreibt Ich habe versucht, E11 mit Python zu lösen
Ich war süchtig danach, eine Python-Venv-Umgebung mit VS Code zu erstellen
Verwenden Sie Python aus Java mit Jython. Ich war auch süchtig danach.
Der Dateiname war in Python schlecht und ich war süchtig nach Import
Lesen Sie die CSV-Datei mit Python und konvertieren Sie sie unverändert in DataFrame
Das 15. Offline-Problem beim Schreiben in Echtzeit wurde mit Python gelöst
Wie man offline in Echtzeit schreibt Ich habe versucht, E12 mit Python zu lösen
Der tree.plot_tree von scikit-learn war sehr einfach und bequem, daher habe ich versucht, zusammenzufassen, wie man es einfach benutzt.
Ich möchte Objekte mit OpenCV erkennen
So verpacken und verteilen Sie Python-Skripte
So teilen und speichern Sie einen DataFrame
Konvertieren Sie Memos sofort mit Python 2to3
So installieren und verwenden Sie pandas_datareader [Python]
Fraktal zum Erstellen und Spielen mit Python
Ich wollte ABC160 mit Python lösen
So arbeiten Sie mit BigQuery in Python
Ich möchte Protokolle mit Python analysieren
Wie man einen Taschentest mit Python macht
Ich möchte mit aws mit Python spielen
Python: Verwendung von Einheimischen () und Globalen ()
Wie man mit Python-Flüchen Japanisch eingibt