得到python对象的真实大小
sys.getsizeof只给你这个对象和他的属性的大小,并没有递归的寻找sub-attributes。
sys.getsizeof得到的大小总感觉奇怪… 下面是一个能到真实大小的脚本:import sysdef 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, '__iter__') and not isinstance(obj, (str, bytes, bytearray)): size += sum([get_size(i, seen) for i in obj]) return size
例:
class People(object): def __init__(self, name, age, dender): self.name = name self.age = age self.gender = gender p1 = People('Li Li', 30, 'Female')p2 = People('Wang Wang', 25, 'Male')>>>sys.getsizeof(p1)>>>56>>>sys.getsizeof(p2)>>>56>>>get_size(p1)>>>465>>>get_size(p2)>>>467