Python面试题更新 2026-08-03

请阐述 Python 中的 pickling 与 unpickling 的含义及其作用。

考察说明

考查对 Python 序列化与反序列化机制的基本概念和用途的理解。

回答思路

  1. 【回答框架 1】Pickling 是将 Python 对象转换为字节流的过程,以便存储到文件或通过网络传输;Unpickling 是逆向过程,将字节流还原为 Python 对象。核心模块是 pickle。
  2. 【回答框架 2】可被 pickle 的类型包括基本数据类型、集合、类实例等,但并非所有对象都可序列化,例如打开的文件句柄、数据库连接等包含操作系统资源或运行时状态的对象无法直接 pickle。
  3. 【回答框架 3】pickle 模块提供了 dump 和 load 函数用于文件操作,以及 dumps 和 loads 用于字节串操作。使用时需要注意安全风险:反序列化不可信数据可能执行任意代码,因此不应在未经验证的数据上执行 unpickling。
  4. 【回答框架 4】与 JSON 等其他序列化格式相比,pickle 是 Python 特定的,支持更广泛的对象类型,但格式不跨语言,且安全性更低。
  5. 【关键点 1】Pickling 将对象转为字节流,Unpickling 将字节流还原为对象。
  6. 【关键点 2】常用函数为 dump/load(文件)和 dumps/loads(字节串)。
  7. 【关键点 3】非安全数据反序列化有代码执行风险,需警惕。
  8. 【关键点 4】pickle 是 Python 专有格式,不支持跨语言。
  9. 【易错点 1】只强调 pickle 的便利性而忽略其安全性风险,未提不可信数据反序列化的危害。
  10. 【易错点 2】将 pickle 与 JSON 混为一谈,忽略格式差异和兼容性限制。
  11. 【易错点 3】认为所有 Python 对象都可被 pickle,忽视文件句柄等不可序列化对象。