Pickle是不安全的,因为它通过调用任意函数来构造任意Python对象。但是,这也使它可以序列化几乎所有Python对象,而无需任何样板甚至白名单/黑名单(在常见情况下)。对于某些用例,这是非常理想的:
- 快速简便的序列化,例如用于暂停和恢复长时间运行但简单的脚本。这里的任何问题都无关紧要,您只想按原样转储程序的状态并在以后加载它。
- 将任意Python数据发送到其他进程或计算机,如中所示
multiprocessing
。安全问题 可能 适用(但大多数情况下没有),普遍性是绝对必要的,并且人们不必阅读它。
在其他情况下,没有任何缺点足以证明将您的内容映射到JSON或其他限制性数据模型的合理性。也许您不希望需要人类可读性/安全性/跨语言兼容性,或者您可能不需要。请记住,您将不需要它。使用JSON是正确的选择,但是正确并不总是那么好。
您会注意到,我完全忽略了“缓慢”的缺点。那是因为它在某种程度上具有误导性:对于完全适合JSON模型(字符串,数字,数组,映射)的数据,Pickle的速度确实确实较慢,但是如果您的数据如此,则无论如何,您都应使用JSON。如果您的数据不太可能(这样),则还需要考虑将对象转换为JSON数据所需的自定义代码,以及将JSON数据重新转换为您所需的自定义代码对象。它增加了工程工作量和运行时开销,必须根据具体情况进行量化。



