小智 19
Pickle是不安全的,因为它通过调用任意函数来构造任意Python对象.但是,这也使它能够序列化几乎所有Python对象,没有任何样板或甚至白/黑列表(在常见情况下).对于某些用例来说,这是非常理想的:
multiprocessing
.安全问题可能适用(但大多数情况下不适用),普遍性是绝对必要的,人类不必阅读它.在其他情况下,没有任何缺点足以证明将您的东西映射到JSON或其他限制性数据模型的工作.也许你不希望需要人类可读性/安全性/跨语言兼容性,或者你可以不用.记住,你不需要它.使用JSON将是正确的事情但权利并不总是等于好.
你会注意到我完全忽略了"缓慢"的缺点.那是因为它有部分误导性:对于完全符合JSON模型(字符串,数字,数组,地图)的数据,Pickle确实更慢,但如果您的数据类似,那么您应该出于其他原因使用JSON.如果您的数据不是那样(非常可能),您还需要考虑将对象转换为JSON数据所需的自定义代码,以及将JSON数据转换回您的JSON数据所需的自定义代码对象.它增加了工程工作量和运行时间开销,必须根据具体情况进行量化.
Pickle 具有方便的优势——它可以在没有额外工作的情况下序列化任意对象图,并且适用于相当广泛的 Python 类型。话虽如此,我在新代码中使用 Pickle 是不寻常的。JSON 使用起来更简洁。