You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

pickle.dump/load与pickle.dumps/loads的区别是什么?

pickle 序列化/反序列化方法差异

核心区分逻辑:方法名末尾带s的操作对象是内存中的字节对象,不带s的操作对象是磁盘文件对象。

序列化方法对比

  • pickle.dump(obj, file, ...)
    无返回值,将Python对象序列化后直接写入已打开的可写字节流文件中,适合序列化结果需要直接持久化到磁盘的场景。
  • pickle.dumps(obj, ...)
    返回bytes类型的序列化结果,不会写入磁盘,适合序列化结果需要在内存中处理的场景,比如网络传输、存入非文件型存储等。
    官方说明翻译:

    pickle.dumps(obj, protocol=None, *, fix_imports=True, buffer_callback=None)
    返回对象obj的序列化表示,格式为bytes对象,不会将其写入文件。

反序列化方法对比

  • pickle.load(file, ...)
    从已打开的可读字节流文件中读取内容,反序列化为Python对象,适合直接从磁盘文件还原对象的场景。
  • pickle.loads(data, ...)
    接收类字节对象作为输入,反序列化为Python对象,适合从内存中的序列化结果还原对象的场景,比如解析网络传输收到的序列化字节、读取数据库中存储的序列化字段等。
    官方说明翻译:

    pickle.loads(data, /, *, fix_imports=True, encoding="ASCII", errors="strict", buffers=None)
    返回对象序列化表示data还原后的对象层级结构,data必须是类字节对象。

使用示例

import pickle

test_data = {"id": 1, "content": "测试内容"}

# 不带s的文件读写流程
with open("test.pkl", "wb") as f:
    pickle.dump(test_data, f)
with open("test.pkl", "rb") as f:
    data_from_file = pickle.load(f)

# 带s的内存处理流程
serialized_bytes = pickle.dumps(test_data)
data_from_bytes = pickle.loads(serialized_bytes)

内容的提问来源于stack exchange,提问作者Krishay Rastogi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 09:15:02