Python pickle模块序列化与反序列化操作指南

码头散步
码头散步
发布时间:2026-10-11| 1人浏览过
原创

Python内置的pickle模块提供了将Python对象序列化为字节流,以及将字节流反序列化为对象的功能。本文通过具体代码示例,演示如何使用pickle进行文件读写和内存操作,并指出在复杂对象变更场景下可能遇到的问题。

基础序列化与反序列化操作

使用pickle模块可以将Python对象转换为字节流,从而实现对象的持久化存储。以下示例定义了一个简单的Student类,包含姓名和年龄属性,并演示了如何将其保存到文件及从文件读取。

import pickle

class Student:
  def __init__(self, name, age):
    self.name = name
    self.age = age
  def say(self):
    print("I am", self.name)

# 创建对象实例
t = Student('Tom', 23)
t.say()  # 输出: I am Tom

# 序列化:将对象写入文件
save_path = './tom_msg'
with open(save_path, 'wb') as f:
    pickle.dump(t, f)  # 将对象序列化为字节流并保存

# 反序列化:从文件读取对象
with open(save_path, 'rb') as f:
    after_t = pickle.load(f)  # 从字节流恢复对象

print(after_t.__dict__)  # 输出: {'name': 'Tom', 'age': 23}
after_t.say()  # 输出: I am Tom

内存中的序列化与反序列化

除了文件操作,pickle还提供了dumps和loads方法,用于在内存中直接处理字节流。这种方式适用于网络传输或缓存场景。

# 创建另一个对象
l = Student('Lisa', 23)

# 序列化到内存字节流
serialized = pickle.dumps(l)
print(serialized)  # 输出类似: b'\x80\x03c__main__\nStudent\nq\x00)\x81q\x01}q\x02...'

# 从内存字节流反序列化
after_l = pickle.loads(serialized)
after_l.say()  # 输出: I am Lisa
print(after_l.__dict__)  # 输出: {'name': 'Lisa', 'age': 23}

注意事项

虽然pickle模块功能强大,但在处理复杂操作(如对象属性变更、添加或删除)时,可能会遇到兼容性问题。若遇到此类错误,可结合copyreg模块进行更精细的控制。

以上就是Python使用pickle模块实现序列化功能的详细内容,更多关于Python对象持久化的资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。