python内存模型_Python结构的内存大小

这些答案都收集浅层尺寸信息。我怀疑访问此问题的访问者最终将在这里回答以下问题:“此复杂对象在内存中有多大?”

这里有一个很好的答案: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, '__iter__') and not isinstance(obj, (str, bytes, bytearray)):

size += sum([get_size(i, seen) for i in obj])

return size

像这样使用:

In [1]: get_size(1)

Out[1]: 24

In [2]: get_size([1])

Out[2]: 104

In [3]: get_size([[1]])

Out[3]: 184

如果您想更深入地了解Python的内存模型,那么这里有一篇很棒的文章,其中包含类似的“总大小”代码段,作为较长说明的一部分:https : //code.tutsplus.com/tutorials/understand-how-您的Python记忆体大量使用--CMS-25609

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值