Skip to content

Instantly share code, notes, and snippets.

@ykshatroff
Created November 4, 2022 17:56
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ykshatroff/117e78e77626966dc41e651223edf4a5 to your computer and use it in GitHub Desktop.
Save ykshatroff/117e78e77626966dc41e651223edf4a5 to your computer and use it in GitHub Desktop.
Python: Get full size of an object
"""
Improved version of https://goshippo.com/blog/measure-real-size-any-python-object/
"""
import sys
def get_size(obj, seen=None):
"""Recursively finds size of objects"""
size = sys.getsizeof(obj)
if seen is None:
seen = set()
obj_id = id(obj)
if obj_id in seen:
return 0
# Important mark as seen *before* entering recursion to gracefully handle
# self-referential objects
seen.add(obj_id)
if isinstance(obj, dict):
size += sum([get_size(v, seen) for v in obj.values()])
size += sum([get_size(k, seen) for k in obj.keys()])
elif hasattr(obj, '__dict__'):
size += get_size(obj.__dict__, seen)
elif hasattr(obj, '__slots__'):
for slot in obj.__slots__:
try:
size += get_size(getattr(obj, slot), seen)
except:
pass
elif hasattr(obj, '__iter__') and not isinstance(obj, (str, bytes, bytearray)):
size += sum([get_size(i, seen) for i in obj])
return size
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment