对象可腌制(或可腌制)意味着啥?

Posted

技术标签:

【中文标题】对象可腌制(或可腌制)意味着啥?【英文标题】:What does it mean for an object to be picklable (or pickle-able)?对象可腌制(或可腌制)意味着什么? 【发布时间】:2011-04-05 22:31:11 【问题描述】:

Python 文档经常提到这个词,我想知道它是什么意思!谷歌搜索没有多大帮助..

【问题讨论】:

可序列化....... docs.python.org/library/pickle.html 【参考方案1】:

这只是意味着它可以被pickle 模块序列化。有关这方面的基本解释,请参阅What can be pickled and unpickled?。 Pickling Class Instances 提供了更多详细信息,并展示了类如何自定义流程。

【讨论】:

【参考方案2】:

通常不可拾取的东西是,例如,套接字、文件(处理程序)、数据库连接等等。默认情况下,从基本 Python 类型(字典、列表、原语、对象、对象引用,甚至循环)构建(递归)的所有内容都可以腌制。

您可以实现自定义酸洗代码,例如,存储数据库连接的配置并在之后恢复它,但您需要特殊的自定义逻辑。

所有这些都使得酸洗比 xml、json 和 yaml 强大得多(但绝对不那么可读)

【讨论】:

【参考方案3】:

Pickling是将python中的对象转换为简单的二进制表示的过程,该表示可用于将该对象写入可以存储的文本文件中。这样做是为了存储 python 对象,也称为序列化。您可以从中推断出 反序列化unpickling 的含义。

所以当我们说一个对象是picklable时,这意味着该对象可以使用python的pickle模块序列化

【讨论】:

【参考方案4】:

这些都是很好的答案,但对于刚接触编程但仍然感到困惑的人来说,这是一个简单的答案:

酸洗正在制作它,这样您就可以长期储存它,以后再拿它而不会变坏。有点像在电子游戏中保存。

因此,任何正在发生变化的东西(例如与数据库的实时连接)都不能直接存储(尽管您可能会想办法存储创建连接所需的信息,而且你可以腌制)

红利定义:序列化是把它打包成可以交给另一个程序的形式。 反序列化它正在解压您收到的东西以便您可以使用它

【讨论】:

以上是关于对象可腌制(或可腌制)意味着啥?的主要内容,如果未能解决你的问题,请参考以下文章

如何腌制一个scapy包?

如何在 Python 3 中腌制和取消腌制到可移植字符串

无法腌制 Scikit 学习最近邻分类器 - 无法腌制实例方法对象

Python:用一些不可腌制的物品腌制一个字典

腌制对象版本控制

Python中的Mongodb聚合:无法腌制'SSLContext'对象