Python 序列化 - 为什么pickle?

标签 python serialization pickle

我知道 Python pickle 是一种以尊重对象编程的方式“存储”Python 对象的方法 - 不同于以 txt 文件或 DB 编写的输出。

您对以下几点有更多的细节或引用:

  • pickle 对象“存储”在哪里?
  • 为什么 pickle 比存储在数据库中更能保留对象表示?
  • 我可以将 pickle 对象从一个 Python shell session 检索到另一个吗?
  • 您是否有重要的例子说明序列化很有用?
  • pickle 序列化是否意味着数据“压缩”?

换句话说,我正在寻找关于 pickle 的文档 - Python.doc 解释了如何实现 pickle ,但似乎没有深入了解有关序列化的使用和必要性的细节。

最佳答案

Pickling 是一种将 python 对象(list、dict 等)转换为字符流的方法。这个想法是这个字符流包含在另一个 python 脚本中重建对象所需的所有信息。

至于 pickle 信息存储在哪里,通常会这样做:

with open('filename', 'wb') as f:
    var = {1 : 'a' , 2 : 'b'}
    pickle.dump(var, f)

这会将我们 var 字典的 pickle 版本存储在“文件名”文件中。然后,在另一个脚本中,您可以从此文件加载到变量中,然后重新创建字典:

with open('filename','rb') as f:
    var = pickle.load(f)

pickle 的另一个用途是如果您需要通过网络传输此字典(可能使用套接字或其他东西)。您首先需要将其转换为字符流,然后您可以通过套接字连接发送它。

此外,这里没有“压缩”可言...它只是一种将一种表示(在 RAM 中)转换为另一种(在“文本”中)的方法。

About.com 对 pickle 有很好的介绍 here .

关于Python 序列化 - 为什么pickle?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8968884/

相关文章:

python - 从字符串更改 int 和 string

python - 根据Python中的值计算字典的相关性

python 灵活的内联变量赋值

python - 尝试使用 matplotlib 更新 3D 图形坐标

java - transient 变量有什么用?

c# - JSON : what is the java Map equivalent in c#

c# - 当 C# 端没有等效值时,我们如何处理 Enum 的反序列化错误?

python - 为什么不能发送cv2视频源?

redis - Django_redis 锁失败并出现 UnpicklingError

Python:让 Pickle 文件更安全?