Python中对象序列化应根据场景选择:仅Python内部使用且需保留对象类型和行为时选pickle,跨语言交互或需可读性时选json;pickle支持任意Python对象但不安全,json仅支持基础类型且需手动处理datetime等。
Python中对象序列化主要用pickle和json,二者用途不同:pickle用于Python内部数据持久化(支持任意Python对象),json用于跨语言数据交换(只支持基础数据类型)。
pickle能序列化函数、类实例、嵌套自定义对象等,适合Python程序内部保存状态或缓存。
注意:pickle文件不安全,不能加载不可信来源的数据,否则可能执行任意代码。
json生成的是纯文本、人类可读、所有主流语言都支持的格式,适合API通信、配置文件、日志记录。
限制:不能直接序列化datetime、set、自定义类等;需手动转换(例如把datetime转为ISO字符串)。
以下是最常用写法对比:
encoding='utf-8');json.load(file) —— 从文件读取default=参数处理不支持类型,例如:json.dumps(obj, default=str) 把无法序列化的对象转成字符串表示按需求判断:
pickle
json
,尤其对大型嵌套结构;json解析慢一点但更安全稳定不复杂但容易忽略:json不支持tuple(会变成list),而pickle保留tuple类型;若业务逻辑依赖tuple不可变性,这点会影响行为。