Oggi ho imparato che Python memorizza nella cache l'espressione {}
, e lo sostituisce con un nuovo dict vuota quando è assegnato ad una variabile:strano comportamento relative al apparente caching di "{}"
print id({})
# 40357936
print id({})
# 40357936
x = {}
print id(x)
# 40357936
print id({})
# 40356432
non ho guardato il codice sorgente, ma ho un'idea su come questo potrebbe essere implementato. (Forse quando il conteggio dei riferimenti al globale {}
viene incrementato, il globale {}
viene sostituito.)
ma considerare questo bit:
def f(x):
x['a'] = 1
print(id(x), x)
print(id(x))
# 34076544
f({})
# (34076544, {'a': 1})
print(id({}), {})
# (34076544, {})
print(id({}))
# 34076544
f
modifica il dict globale senza inducendolo a essere sostituito, e stampa il dettato modificato Ma al di fuori di f
, nonostante l'id sia lo stesso, il dict globale è ora vuoto!
Cosa sta succedendo ??
potresti essere interessato anche a questo: http://stackoverflow.com/questions/15315096/why-the-id-of-an-object-would-change-depending-on-the-line-in-the -python-shell/15321863 # 15321863 – User
Cassa molto interessante, grazie per la condivisione. – dimo414
'id()' di Python utilizza un indirizzo di memoria (almeno nell'implementazione CPython) come ID per gli oggetti. È un identificatore univoco solo in un singolo punto nel tempo, non unico per l'intera durata del programma. Questo è esplicito nella documentazione: http://docs.python.org/2/library/functions.html#id –