Python中为何数据对象内存占用大小与写入文件字节数不同?
为什么写入文件的字节数与
sys.getsizeof()结果不一致? 这问题问到点子上了!其实这两种方式统计的完全不是同一个东西,咱们把差异拆解开来:
1. 写入文件的12字节:纯原始数据的长度
你用fp.write(data)写入的是bytes对象里存储的原始字节内容,没有任何额外开销。咱们数一下你的data:
data = b"abc\npqr\nxyz\n" # 拆分后:abc(3)+\n(1) + pqr(3)+\n(1) + xyz(3)+\n(1) = 12字节
这12字节就是磁盘文件里实实在在存储的内容,完全对应你定义的原始字节数据,没有其他附加信息。
2. sys.getsizeof()/__sizeof__():Python对象的内存总占用
Python里的任何对象(包括bytes)在内存中存储时,除了原始数据本身,还会携带对象元数据:
- 引用计数(用来做垃圾回收)
- 对象类型标识(告诉Python这是个bytes对象)
- 长度信息(快速获取bytes的长度)
- 其他内部管理用的字段
这些元数据都要占用额外的内存空间。举个直观的例子,在CPython 3.x中,一个空的bytes对象b""调用__sizeof__()会返回33字节左右(不同版本略有差异)——这就是空对象的基础开销。你的data有12字节原始数据,所以总内存占用就是基础开销 + 12字节,结果自然比12大。
核心差异总结
write()写入的是纯数据内容长度:只算你实际要存储的字节,和Python对象结构无关。sys.getsizeof()统计的是Python对象在内存中的完整大小:包含对象本身的管理开销 + 原始数据长度。
内容的提问来源于stack exchange,提问作者Kaustubh.P.N
相关产品推荐
相关产品推荐

