[PYTHON] Verstehen Sie den Unterschied zwischen der kumulativen Zuordnung zu Variablen und der kumulativen Zuordnung zu Objekten

Objekte (Werte) und Variablen

In Python, None werden Zahlen, Funktionen, Klassen, Methoden, Module usw. ** alle ** in ** Objekte ** (Instanzen einer Klasse) konvertiert. Die ** Variable ** enthält die ** Objekt-ID **, die der ** Referenzwert ** für das Objekt ** ist. Sie können jedem Objekt ** zuweisen **. Sie können auch Objekte eines anderen Typs ** neu zuweisen **. ** Variablen ** werden im ** Variablenwörterbuch ** mit ** Variablenname ** als Wörterbuchschlüssel und ** Objekt-ID ** als Wörterbuchwert gespeichert. Sie können den Inhalt des ** Variablenwörterbuchs ** mit der Funktion vars, der Funktion local und der Funktion globals überprüfen. Die ** Liste ** ist ein ** Array ** der ** Objekt-ID **. Sie können jedem Array-Element auch Objekte unterschiedlichen Typs zuweisen / neu zuweisen.

Variablenzuweisung / Neuzuweisung

image.png

>>> id(1)
15812500000
>>> type(1)
<class'int'>
>>> 1 .__class__    #Fügen Sie vor dem Punkt ein Leerzeichen ein, damit es nicht als Dezimalpunkt interpretiert wird
<class'int'>
>>> 1 .real
1
>>> id(2)
15812500032
>>> a = 1
>>> id(a)
15812500000
>>> a = 2
>>> id(a)
15812500032
>>> vars()
{'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <class'_frozen_importlib.BuiltinImporter'>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>,
 'a': 2}

Kumulative Zuordnung zu Variablen Teil 1: Bei unveränderlichen Objekten

Zuweisungen wie "+ =" werden als kumulative Zuweisungen bezeichnet. Die kumulative Zuweisung in Python verhält sich unterschiedlich, je nachdem, ob das der Variablen zugewiesene Objekt ein unveränderliches oder veränderliches Objekt ist. Weisen Sie bei einem unveränderlichen Objekt wie dem Typ int ein anderes Objekt neu zu, wie in der folgenden Abbildung dargestellt.

image.png

>>> a = 2
>>> id(a)
15812500032
>>> a += 1
>>> id(a)
15812500064

Objekt auflisten

image.png

>>> id(1)
15812500000
>>> id(2)
15812500032
>>> id(3)
15812500064
>>> a = [1, 2, 3]
>>> id(a)
123145300973832
>>> type(a)
<class'list'>
>>> a.__class__
<class'list'>
>>> len(a)
3
>>> a.__len__()
3
>>> for ele in a:
...     print(ele, type(ele), id(ele))
...
1 <class'int'> 15812500000
2 <class'int'> 15812500032
3 <class'int'> 15812500064
>>> vars()
{'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <class'_frozen_importlib.BuiltinImporter'>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>,
 'a': [1, 2, 3],
 'ele': 3}

Kumulative Zuordnung zu Objekten

image.png

>>> a = [1, 2, 3]
>>> id(a[0])
15812500000
>>> a[0] += 1
>>> id(a[0])
15812500032
>>> id(a[1])
15812500032

Beachten Sie, dass ganzzahlige Werte (Objekte vom Typ int) von "-5" bis "256" als häufig verwendete Werte zwischengespeichert und ** gemeinsam genutzt und wiederverwendet ** werden, also "a [0]" und "a" [1] `Die Objekt-IDs sind identisch. Objektorientierte Entwurfsmuster (https://ja.wikipedia.org/wiki/%E3%83%87%E3%82%B6%E3%82%A4%E3%83%B3%E3%83%91 % E3% 82% BF% E3% 83% BC% E3% 83% B3_ (% E3% 82% BD% E3% 83% 95% E3% 83% 88% E3% 82% A6% E3% 82% A7% E3% 82% A2)) "[Fliegengewichtsmuster](https://ja.wikipedia.org/wiki/Flyweight_%E3%83%91%E3%82%BF%E3%83%BC%E3%83" % B3) ”wird verwendet.

Kumulative Zuordnung zu Variablen Teil 2: Bei veränderlichen Objekten

Da es sich bei der Liste um ein veränderbares Objekt handelt, verhält sie sich anders als bei einem Objekt vom Typ int. Wie in der folgenden Abbildung gezeigt, wird das Objekt zur Verarbeitung aufgefordert, und das Objekt selbst ändert den Objektinhalt.

image.png

>>> a = [1, 2, 3]
>>> id(a)
123145300973832
>>> hasattr(a, '__iadd__')
True
>>> hasattr(2, '__iadd__')
False
>>> a += [4]
>>> id(a)
123145300973832
>>> len(a)
4
>>> a.__len__()
4
>>> id(a[3])
15812500096

Referenz

Kumulative Zuweisungsanweisung: https://docs.python.org/ja/3/reference/simple_stmts.html#augmented-assignment-statements Kumulative Zuweisungsmethode: https://docs.python.org/ja/3/reference/datamodel.html#object.iadd

Recommended Posts

Verstehen Sie den Unterschied zwischen der kumulativen Zuordnung zu Variablen und der kumulativen Zuordnung zu Objekten
Wie man Argparse benutzt und den Unterschied zwischen Optparse
Ich bin mir über den Unterschied zwischen Modulen, Paketen und Bibliotheken nicht sicher und habe versucht, sie zu organisieren.
[Einführung in Python] Was ist der Unterschied zwischen einer Liste und einem Taple?
Was ist der Unterschied zwischen "pip" und "conda"?
Unterschied zwischen Variablen und Selbst. Variablen in der [Python] -Klasse
Über den Unterschied zwischen "==" und "is" in Python
Über den Unterschied zwischen PostgreSQL su und sudo
Was ist der Unterschied zwischen Unix und Linux?
Verstehen Sie den TensorFlow-Namespace und die gemeinsam genutzten Mastervariablen
Berücksichtigung des Unterschieds zwischen ROC-Kurve und PR-Kurve
Grober Unterschied zwischen Unicode und UTF-8 (und seinen Begleitern)
Kann BERT den Unterschied zwischen "Ame (Süßigkeiten)" und "Ame (Regen)" verstehen?
Unterschied zwischen Ruby und Python in Bezug auf Variablen
Was ist der Unterschied zwischen usleep, nanosleep und clock_nanosleep?
[Einführung in das Modell für Infektionskrankheiten] Was ist der Unterschied zwischen der April-Epidemie und dieser Epidemie? .. .. ‼
Was ist der Unterschied zwischen symbolischen und harten Links?
Unterschied zwischen Prozess und Job
Unterschied zwischen "categoryical_crossentropy" und "sparse_categorical_crossentropy"
Informationen zu Python-Variablen und -Objekten
Unterschied zwischen Regression und Klassifikation
Ich möchte den Unterschied zwischen der for-Anweisung in der Python + numpy-Matrix und der Julia for-Anweisung auffangen
"Tiefe Kopie" und "flache Kopie", um mit dem kleinsten Beispiel zu verstehen
Ich habe versucht, die Unterschiede zwischen Java und Python aufzuzählen
Unterschied zwischen np.array und np.arange
Unterschied zwischen Vordergrundprozess und Hintergrundprozess, prinzipiell verstanden
Unterschied zwischen MicroPython und CPython
Unterschied zwischen ps a und ps -a
Unterschied zwischen Return und Print-Python
Ich habe versucht, den Unterschied zwischen A + = B und A = A + B in Python herauszufinden
Ich untersuchte das Verhalten bezüglich des Unterschieds zwischen Hard Link und Symbolic Link
Der Versuch, Segmentbäume Schritt für Schritt zu implementieren und zu verstehen (Python)
Unterschied zwischen Ruby und Python Split
Unterschied zwischen Java und Python (Memo)
Unterschied zwischen list () und [] in Python
Unterschied zwischen SQLAlchemy filter () und filter_by ()
Unterschied zwischen == und ist in Python
Memorandum (Unterschied zwischen csv.reader und csv.dictreader)
(Hinweis) Unterschied zwischen Gateway und Standard-Gateway
Unterschied zwischen Numpys Randint und Randoms Randint
Unterschied zwischen sortiert und sortiert (Denkmal)
Unterschied zwischen der Python2-Serie und der Python3-Serie dict.keys ()
[Python] Unterschied zwischen Funktion und Methode
Unterschied zwischen SQLAlchemy flush () und commit ()
Python - Unterschied zwischen exec und eval
[Python] Unterschied zwischen randrange () und randint ()
[Python] Unterschied zwischen sortiert und sortiert (Colaboratory)
Ich möchte die Verarbeitung zwischen Testzeit und Produktionsumgebung trennen
So ermitteln Sie mit Python den Unterschied zwischen Datum und Uhrzeit in Sekunden
Suchen Sie den Namen und die Daten einer freien Variablen in einem Funktionsobjekt
[Xg Boost] Unterschied zwischen Softmax und Softprob
Unterschied zwischen Anweisungen (Anweisungen) und Ausdrücken (Ausdrücken) in Python
Notieren Sie die Schritte zum Verständnis des maschinellen Lernens
[Django ORM] Unterschied zwischen Werten () und nur ()
Unterschiede in der Beziehung zwischen PHP und Python schließlich und beenden
Unterschied zwischen @classmethod und @staticmethod in Python
Unterschied zwischen Anhängen und + = in der Python-Liste
Unterschied zwischen nicht lokal und global in Python
Unterschied zwischen linearer Regression, Ridge-Regression und Lasso-Regression
[Python] Unterschied zwischen Klassenmethode und statischer Methode