pythonmemorymemory-footprint

In-memory size of a Python structure


Is there a reference for the memory size of Python data stucture on 32- and 64-bit platforms?

If not, this would be nice to have it on SO. The more exhaustive the better! So how many bytes are used by the following Python structures (depending on the len and the content type when relevant)?

(For containers that keep only references to other objects, we obviously do not want to count the size of the item themselves, since it might be shared.)

Furthermore, is there a way to get the memory used by an object at runtime (recursively or not)?


Solution

  • The recommendation from an earlier question on this was to use sys.getsizeof(), quoting:

    >>> import sys
    >>> x = 2
    >>> sys.getsizeof(x)
    14
    >>> sys.getsizeof(sys.getsizeof)
    32
    >>> sys.getsizeof('this')
    38
    >>> sys.getsizeof('this also')
    48
    

    You could take this approach:

    >>> import sys
    >>> import decimal
    >>> 
    >>> d = {
    ...     "int": 0,
    ...     "float": 0.0,
    ...     "dict": dict(),
    ...     "set": set(),
    ...     "tuple": tuple(),
    ...     "list": list(),
    ...     "str": "a",
    ...     "unicode": u"a",
    ...     "decimal": decimal.Decimal(0),
    ...     "object": object(),
    ... }
    >>> for k, v in sorted(d.iteritems()):
    ...     print k, sys.getsizeof(v)
    ...
    decimal 40
    dict 140
    float 16
    int 12
    list 36
    object 8
    set 116
    str 25
    tuple 28
    unicode 28
    

    2012-09-30

    python 2.7 (linux, 32-bit):

    decimal 36
    dict 136
    float 16
    int 12
    list 32
    object 8
    set 112
    str 22
    tuple 24
    unicode 32
    

    python 3.3 (linux, 32-bit)

    decimal 52
    dict 144
    float 16
    int 14
    list 32
    object 8
    set 112
    str 26
    tuple 24
    unicode 26
    

    2016-08-01

    OSX, Python 2.7.10 (default, Oct 23 2015, 19:19:21) [GCC 4.2.1 Compatible Apple LLVM 7.0.0 (clang-700.0.59.5)] on darwin

    decimal 80
    dict 280
    float 24
    int 24
    list 72
    object 16
    set 232
    str 38
    tuple 56
    unicode 52