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.
>>> 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}
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.
>>> a = 2
>>> id(a)
15812500032
>>> a += 1
>>> id(a)
15812500064
>>> 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}
>>> 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.
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.
>>> 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
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