python 获取真正对象的大小 get_size

2019-11-21 22:34:07 浏览数 (1)

代码语言:javascript复制
import sys


def get_size(obj, seen=None):
    # From
    # 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, '__iter__') and not isinstance(obj, (str, bytes, bytearray)):
        size  = sum([get_size(i, seen) for i in obj])
    return size


class Test(object):
    __slots__ = ['id']

    def __init__(self):
        self.id = ""


t = Test()
print(get_size(t))

0 人点赞