Skip to content

Instantly share code, notes, and snippets.

@senderle
Created November 6, 2015 19:40
Show Gist options
  • Select an option

  • Save senderle/2d48a5493ad8aecc56c5 to your computer and use it in GitHub Desktop.

Select an option

Save senderle/2d48a5493ad8aecc56c5 to your computer and use it in GitHub Desktop.

Revisions

  1. Jonathan Scott Enderle revised this gist Nov 6, 2015. No changes.
  2. Jonathan Scott Enderle created this gist Nov 6, 2015.
    27 changes: 27 additions & 0 deletions mem.py
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,27 @@
    from collections import Sequence, Mapping
    from sys import getsizeof

    def traverse(obj):
    if isinstance(obj, basestring):
    yield obj
    elif isinstance(obj, Sequence):
    yield obj
    for o in obj:
    for inner_o in traverse(o):
    yield inner_o
    elif isinstance(obj, Mapping):
    yield obj
    for k, v in obj.iteritems():
    for inner_k in traverse(k):
    yield inner_k
    for inner_v in traverse(v):
    yield inner_v
    else:
    yield obj

    def get_total_size(x):
    unique = {id(o): o for o in traverse(x)}
    return sum(map(getsizeof, unique.values()))

    if __name__ == '__main__':
    print get_total_size({'a': 'b', 'c': ['d', 'e', 'f'], 'g': {'h': 'i'}})