首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Python 里 pickle 到底存了什么:拆开 __reduce__、__getstate__ 和那串能执行代码的字节码

Python 里 pickle 到底存了什么:拆开 __reduce__、__getstate__ 和那串能执行代码的字节码

作者头像
小小张说故事
发布于 2026-11-11 10:24:04
发布于 2026-11-11 10:24:04
250
举报
概述
pickle 存的不是数据,而是一段描述怎么把对象重新造出来的指令流,反序列化就是照着执行一遍。本文用本机 CPython 3.13.14 实测协议 0~5 的字节数由 101 降到 76、__getstate__ 让体积从 2817 降到 81 字节、__reduce__ 执行任意可调用对象的安全边界、循环引用与共享引用保持、__slots__ 在协议 0 下报 TypeError,以及 pickle 比 json 快约 3.3 倍,附六条排错清单

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

目录
  • 一、先看它存出来的东西长什么样
  • 二、六个协议的实测差异
  • 三、__getstate__ 能让体积从 2817 字节降到 81 字节
  • 四、__reduce__:pickle 真正的总开关
  • 五、它能保住引用结构,json 不能
  • 六、哪些东西存不了
  • 七、__slots__ 有个协议版本陷阱
  • 八、性能:pickle 比 json 快,也小
  • 九、六条排错清单
  • 十、一段可直接跑的完整示例
  • 小结
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档