Created
November 6, 2015 19:40
-
-
Save senderle/2d48a5493ad8aecc56c5 to your computer and use it in GitHub Desktop.
Revisions
-
Jonathan Scott Enderle revised this gist
Nov 6, 2015 . No changes.There are no files selected for viewing
-
Jonathan Scott Enderle created this gist
Nov 6, 2015 .There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal 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'}})