得到python对象的真实大小

 2023-09-11 阅读 31 评论 0

摘要:得到python对象的真实大小 sys.getsizeof只给你这个对象和他的属性的大小,并没有递归的寻找sub-attributes。 sys.getsizeof得到的大小总感觉奇怪… 下面是一个能到真实大小的脚本: import sysdef get_size(obj, seen=None):"""Recursively fi

得到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 objectsseen.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 = nameself.age = ageself.gender = genderp1 = 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

相关介绍:

  1. https://goshippo.com/blog/measure-real-size-any-python-object/
  2. https://github.com/bosswissam/pysize/blob/master/pysize.py

转载于:https://www.cnblogs.com/helloeboy/p/10028914.html

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/1/44158.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息