Python中Pickle序列化生成的文件是否有压缩功能?
我用 pickle dump 之后的文件大概是 700M,但 load 之后却占了 8G 的内存。
去官方文档搜了下,没有关于 size 的说明。
Python中Pickle序列化生成的文件是否有压缩功能?
3 回复
pickle 只是序列化,一个对象反序列化出来会初始化,会带额外的信息,会占用额外的内存啊
用其他的方法也是一样的效果,比如 xml,json,protobuf
Pickle本身没有内置的压缩功能,它生成的是未经压缩的二进制数据。如果你需要压缩,得自己处理。通常的做法是先用pickle序列化对象,然后用gzip、bz2或lzma这些标准库模块进行压缩。
比如,用gzip压缩后保存:
import pickle
import gzip
data = {"key": "value", "list": [1, 2, 3]}
# 压缩保存
with gzip.open('data.pkl.gz', 'wb') as f:
pickle.dump(data, f)
# 读取解压
with gzip.open('data.pkl.gz', 'rb') as f:
loaded_data = pickle.load(f)
print(loaded_data) # 输出: {'key': 'value', 'list': [1, 2, 3]}
或者用bz2:
import bz2
with bz2.open('data.pkl.bz2', 'wb') as f:
pickle.dump(data, f)
压缩率取决于你的数据内容,文本类数据压缩效果通常不错,但如果是已经压缩过的数据(比如图片、视频),再压缩可能效果不大,甚至文件会变大。
简单说就是:pickle不负责压缩,要压缩得自己额外处理。
楼主 你这个问题找到答案了吗

