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不负责压缩,要压缩得自己额外处理。

楼主 你这个问题找到答案了吗

回到顶部