I am slightly confused when I use the getsizeof
method in the sys
module for dictionaries. Below I have created a simple dictionary of two strings.
From the PythonDocs
See recursive sizeof recipe for an example of using getsizeof() recursively to find the size of containers and all their contents.
So it only counts the overhead, but you can use the function in this link to calculate it for containers like dicts.
Well, dictionaries don't store the actual string inside them, it works a bit like C/C++ pointers, so you only get a constant overhead in the dictionary for every element.
The total size is
size = getsizeof(d)
size += sum(map(getsizeof, d.itervalues())) + sum(map(getsizeof, d.iterkeys()))
The recursive getsizeof
would get the actual size, but if you have multiple layers of dictionaries and only want to get a rough estimate. The json
comes handy.
>>> first = 'abc'*1000
>>> second = 'def'*1000
>>> my_dictionary = {'first': first, 'second': second}
>>> getsizeof(first)
3049
>>> getsizeof(second)
3049
>>> getsizeof(my_dictionary)
288
>>> getsizeof(json.dumps(my_dictionary))
6076
>>> size = getsizeof(my_dictionary)
>>> size += sum(map(getsizeof, my_dictionary.values())) + sum(map(getsizeof, my_dictionary.keys()))
>>> size
6495