pickle序列化:Python对象持久化、底层差异、安全高危警告
博客导语
json只能序列化基础数据,pickle可以序列化所有Python对象(函数、类、实例、列表),但存在致命安全漏洞,生产使用有严格红线,90%新手忽略安全风险。
一、pickle四大对应方法
dumps:对象转二进制字节
loads:二进制字节转回对象
dump:对象写入二进制文件
load:二进制文件读取还原对象
二、自定义类对象持久化案例
import pickle class User: def __init__(self,name): self.name = name u = User("小明") # 写入文件 with open("user.pkl","wb") as f: pickle.dump(u,f) # 读取还原实例 with open("user.pkl","rb") as f: new_u = pickle.load(f) print(new_u.name)三、pickle vs json核心差异
兼容性:json跨语言通用,pickle仅Python可用
数据范围:json仅基础类型,pickle支持全部Python对象
可读性:json明文可读,pickle二进制不可读
四、致命安全问题(生产红线)
绝对禁止解析外网、用户上传的pickle文件:pickle二进制数据可注入恶意代码,load时自动执行任意系统命令,直接服务器沦陷。仅可用于内部可信数据本地存储。
