Wenn ich den folgenden Code in einem Python-Interpreter ausführen:Warum ist "Objekt .__ dict__ ist Objekt .__ dict__" False?
>>> object.__dict__ is object.__dict__
False
Warum ist das Ergebnis False
?
Wenn ich den folgenden Code in einem Python-Interpreter ausführen:Warum ist "Objekt .__ dict__ ist Objekt .__ dict__" False?
>>> object.__dict__ is object.__dict__
False
Warum ist das Ergebnis False
?
object.__dict__
, im Gegensatz zu anderen __dict__
s, gibt ein mappingproxy
Objekt zurück (a dict_proxy
in Python 2). Diese werden im laufenden Betrieb erstellt, wenn __dict__
angefordert wird. Daher erhalten Sie bei jedem Zugriff auf object.__dict__
einen neuen Proxy. Sie alle teilen sich das gleiche zugrunde liegende Objekt, aber der Proxy ist die ganze Zeit über frisch. Deshalb können Sie nicht zwei identische bekommen.
Das heißt, '{'foo': 'bar'} ist {'foo': 'bar'}' scheint auch 'False' zu sein ... ist das nicht ein breiteres dict-Verhalten, nicht etwas bestimmtes 'Objekt .__ dict__'? – DreadPirateShawn
Danke, warum kann dieser Mappingproxy nicht zwischengespeichert und dann wiederverwendet werden? – NathaneilCapital
@DreadPirateShawn Das liegt daran, dass Sie * zwei separate Wörterbücher * erstellen. 'd = {'foo': 'bar'}; d is d wird sich so verhalten, wie Sie es erwarten. – jonrsharpe
Weil Sie ein 'dict_proxy'-Objekt erhalten, das jedes Mal neu erstellt wird, wenn Sie auf das Attribut '__dict__' zugreifen und schreibgeschützt sind, um zu verhindern, dass Sie mit 'Objekt' herumhantieren. – jonrsharpe