2014-05-12 9 views
5

Recentemente sono stato confrontando la quantità di memoria occupata da un Python set a quello occupato da un frozenset utilizzando Pympler:memoria occupata da set vs frozenset in Python 2.7

>>> from pympler.asizeof import asizeof 
>>> x = range(100) 
>>> s = set(x) 
>>> f0 = frozenset(x) 
>>> f1 = frozenset(s) 
>>> asizeof(s) 
10824 
>>> asizeof(f0) 
10824 
>>> asizeof(f1) 
6728 
>>> f0==f1 
True 

Perché un frozenset creata da un set occupare una quantità di memoria diversa da quella creata da un altro iterabile? O è solo una stranezza di come Pympler approssima la quantità di memoria occupata da una variabile in Python?

+0

Comportamento simile osservato con Python 3.4.0. – lebedov

risposta

1

Ciò è dovuto alla logica del costruttore frozenset in C, ma in realtà vale la pena di un bug report CPython.

+0

Problema archiviato [qui] (http://bugs.python.org/issue21507). – lebedov

+0

Potrebbe essere 'f1' internally references' s' e quindi non assegna memoria extra come 'f0' fa? –

+0

Scoperta interessante e buona domanda (+1) ma ** Nota per i futuri lettori **, il problema è stato esaminato e rifiutato (due volte, appare). È destinato a essere in questo modo (per una ragione ragionevole, IMVHO). Leggi i commenti del problema per capire le loro ragioni. –