You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 03:54:16