2014-05-12 5 views
5

Vor kurzem habe ich die Größe des Speichers von einem Python set zu, dass von einem frozenset besetzt besetzt Vergleich mit Pympler:Speicher von Set vs frozenset in Python belegt 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 

Warum sollte ein frozenset von einem set erstellt besetzen eine andere Menge an Speicher als eine andere aus einem anderen iterable? Oder ist das nur eine Eigenart davon, wie Pympler die Menge an Speicher annähert, die eine Variable in Python belegt?

+0

Ähnliches Verhalten mit Python 3.4.0 beobachtet. – lebedov

Antwort

1

Dies liegt an der eingefrorenen Konstruktor Logik in C, aber es ist in der Tat möglicherweise eine CPython-Fehlerbericht wert.

+0

Problem eingereicht [hier] (http://bugs.python.org/issue21507). – lebedov

+0

Könnte es sein, dass 'f1' interne Referenzen' s' enthält und daher keinen zusätzlichen Speicher wie 'f0' zuweist? –

+0

Interessante Entdeckung und gute Frage (+1), aber ** Hinweis für zukünftige Leser **, das Problem wurde überprüft und abgelehnt (zweimal, es scheint). Es soll so sein (aus einem vernünftigen Grund, IMVHO). Lesen Sie die Problemkommentare, um ihre Gründe zu verstehen. –