Se corro il seguente codice in un interprete Python:Perché "oggetto .__ dict__ è oggetto .__ dict__" Falso?
>>> object.__dict__ is object.__dict__
False
Perché è il risultato False
?
Se corro il seguente codice in un interprete Python:Perché "oggetto .__ dict__ è oggetto .__ dict__" Falso?
>>> object.__dict__ is object.__dict__
False
Perché è il risultato False
?
object.__dict__
, a differenza di altri __dict__
s, restituisce un oggetto mappingproxy
(un dict_proxy
in Python 2). Questi sono creati al volo quando è richiesto __dict__
. Di conseguenza, ottieni un nuovo proxy ogni volta che accedi a object.__dict__
. Proiettano tutti lo stesso oggetto sottostante, ma il proxy è sempre nuovo. Ecco perché non puoi averne due identici.
Detto questo, '{'foo': 'bar'} è {'foo': 'bar'}' sembra essere 'False', anche ... non è un comportamento dict più ampio, non qualcosa di specifico per '.__ dict__' oggetto? – DreadPirateShawn
Grazie, perché questo mappingproxy non può essere memorizzato nella cache e quindi riutilizzarlo? – NathaneilCapital
@DreadPirateShawn è perché stai creando * due dizionari separati *. 'd = {'pippo': 'bar'}; d è d' si comporterà come ci si aspetta. – jonrsharpe
Poiché si ottiene un oggetto 'dict_proxy', che viene creato di nuovo ogni volta che si accede all'attributo' __dict__' ed è di sola lettura per cercare di impedire all'utente di creare 'oggetto'. – jonrsharpe