>>> x = 100
>>> y = 100
>>> x == y
True
>>> x is y
True
>>> x = 1000
>>> y = 1000
>>> x == y
True
>>> x is y
False
Der Operator is vergleicht, ob der linke und der rechte Verweis auf dasselbe Objekt verweisen. Siehe folgendes Beispiel.
>>> x = []
>>> y = []
>>> x is y
False
>>> z = x
>>> x is z
True
>>> x.append(42)
>>> y
[]
>>> z
[42]
x und y sind separate Listenobjekte, die separat erstellt werden. X ist also y ist falsch, und das Ändern von x wirkt sich nicht auf y aus.
Andererseits bezieht sich z auf dasselbe Objekt wie x. X ist also z ist wahr, und das Ändern von x (das Listenobjekt, auf das verwiesen wird) ändert natürlich auch z.
Ein Objekt, dessen Wert das Objekt angibt, wird beim Erstellen des Objekts bestimmt und ändert sich danach nicht mehr. Es wird als unveränderlich bezeichnet. Die ganze Zahl ist unveränderlich. Siehe den folgenden Beispielcode.
>>> x = 42
>>> y = x
>>> x is y
True
>>> x += 1
>>> x
43
>>> y
42
>>> x is y
False
Unmittelbar nach "y = x" war "x ist y" wahr, weil x und y auf dasselbe Objekt zeigen, das 42 darstellt.
x + = 1
weist x ein anderes Objekt zu, das 43 darstellt. Also wird "x ist y" falsch.
Das Flyweight-Muster wird zur Optimierung verwendet, wenn unveränderliche Objekte wie ganzzahlige Typen in großer Anzahl verwendet werden. Indem Sie ein vorhandenes Objekt freigeben, anstatt jedes Mal ein Objekt mit diesem Wert zu erstellen, wenn ein neuer Wert benötigt wird
Es gibt Verdienste wie.
(Stand 07.09.2016) In CPython werden Ganzzahlen von -5 bis 256 vom Flyweight-Muster verwaltet, und es wird immer dasselbe Objekt verwendet. Wenn der Wert in diesem Bereich liegt, kann "x ist y" auch für Objekte wahr sein, die separat erstellt werden sollten.
Recommended Posts