__sizeof__与sys.getsizeof()取值差异:应采信哪个结果?
为什么
__sizeof__()和sys.getsizeof()返回的对象内存大小不一样? 这是个很多Python开发者都会遇到的困惑,咱们先把这俩方法的本质掰明白,再看该采信哪个结果:
核心区别拆解
__sizeof__():这是对象自带的方法,它只返回对象自身基础结构体占用的字节数,完全不包含Python为管理这个对象额外加的开销,也不会计算它引用的其他对象(比如你示例里Person实例的name字符串、age整数)的内存。对于自定义类的实例,默认的__sizeof__()只会返回实例本身的基础结构大小,也就是你看到的32字节。sys.getsizeof():这个标准库函数会先调用对象的__sizeof__(),然后再加上Python运行时管理该对象所需的额外内存开销——比如垃圾回收(GC)的跟踪信息、存储实例属性的__dict__字典这些都会被算进去。所以它返回的是这个对象在Python中实际占用的总内存,也就是你看到的56字节。
该采信哪个结果?
完全看你的需求:
- 如果你只是想研究对象本身的基础结构大小,那用
__sizeof__(); - 如果你是在做内存分析、优化,想知道这个对象真正消耗的系统内存,那必须采信
sys.getsizeof()的结果——因为它反映了Python为这个对象分配的全部内存资源,包括管理用的额外开销。
你的测试代码与输出
class Person: def __init__(self,name,age): self.name = name self.age = age p = Person('vinay',30) print(p.__sizeof__()) import sys print(sys.getsizeof(p))
输出:
32 56
内容的提问来源于stack exchange,提问作者Mithun Kumar
相关产品推荐
相关产品推荐

