Umgebung: Python 3.5.0, 64 Bit
Die Speichernutzung eines Objekts kann mit sys.getsizeof überprüft werden, zählt jedoch nicht bis zum referenzierten Objekt.
>>> import sys
>>> sys.getsizeof([1, 2 ,3])
88
>>> sys.getsizeof([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
88
Wenn Sie die ungefähre Gesamtspeicherauslastung einschließlich der Elemente im Container wissen möchten, müssen Sie anscheinend alle referenzierten Objekte verfolgen und den Wert getsizeof integrieren.
Referenz: http://code.activestate.com/recipes/577504/
total_size.py
import sys
from itertools import chain
from collections import deque
def total_size(obj, verbose=False):
seen = set()
def sizeof(o):
if id(o) in seen:
return 0
seen.add(id(o))
s = sys.getsizeof(o, default=0)
if verbose:
print(s, type(o), repr(o))
if isinstance(o, (tuple, list, set, frozenset, deque)):
s += sum(map(sizeof, iter(o)))
elif isinstance(o, dict):
s += sum(map(sizeof, chain.from_iterable(o.items())))
elif "__dict__" in dir(o): #Es muss einen besseren Weg geben
s += sum(map(sizeof, chain.from_iterable(o.__dict__.items())))
return s
return sizeof(obj)
Es scheint einen anderen Weg zu geben, Gurke zu verwenden.
Recommended Posts