这些答案都收集浅层尺寸信息。我怀疑访问此问题的访问者最终将在这里回答以下问题:“此复杂对象在内存中有多大?”
这里有一个很好的答案: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