sys.getsizeof()仅返回对象头部开销,不递归统计内部引用数据;小整数和布尔值约28字节,空字符串约49字节,空列表约56字节,空元组约24字节,空字典约240字节。

用 sys.getsizeof() 可以查看 Python 基础数据类型对象本身的内存大小,但要注意它只计算对象头部开销,不递归统计内部引用的数据。
基础类型直接测大小
大多数内置类型(如 int、float、bool、str、tuple、list、dict、set)都能用 sys.getsizeof() 获取近似内存占用:
- 小整数(如 0–100):通常占 28 字节(含对象头和值存储)
-
布尔值:虽是
int子类,但True/False也占约 28 字节 -
空字符串:
""占约 49 字节(Python 3.11+),含编码信息与缓冲区指针 -
空列表:
[]占约 56 字节(不同版本略有浮动,常见 40–56) -
空元组:
()占约 24 字节(不可变,结构更轻) -
空字典:
{}占约 240 字节(哈希表初始桶数组较大)
注意 getsizeof 的局限性
sys.getsizeof() 不深入嵌套结构。例如:
- 对列表调用时,只算列表容器本身,不算其中每个元素的内存
- 对字典调用时,不包含键和值对象所占空间,只算哈希表结构
- 对自定义类、
numpy.ndarray、networkx.Graph等非内置类型,返回值往往严重偏低,不能反映真实内存
更准确的测量方法
若需评估整体内存消耗(尤其含嵌套或第三方对象),可结合以下方式:
-
递归估算:用第三方库如
pympler.asizeof.asizeof(),它会遍历引用链累加 -
进程级观测:用
psutil.Process().memory_info().rss测量前后内存差,适合大对象或批量操作 -
限制场景验证:对纯内置类型组合(如只含 int/str 的 list/dict),可先用
getsizeof得基准,再按元素数量粗略估算增量
动手试试看
运行这段代码能快速对比常见类型:
import sys<br>print("int(0):", sys.getsizeof(0))<br>print("str(''):", sys.getsizeof(""))<br>print("list():", sys.getsizeof([]))<br>print("dict():", sys.getsizeof({}))<br>print("tuple():", sys.getsizeof(()))
结果会因 Python 版本和系统架构(32/64 位)略有差异,但量级关系稳定:字典 > 列表 > 元组 ≈ 字符串 > 整数。

















