【发布时间】:2014-03-12 05:08:49
【问题描述】:
一直在用pickle,很开心,后来看到这篇文章:Don't Pickle Your Data
进一步阅读似乎是这样的:
- Pickle is slow
- Pickle is unsafe
- Pickle 不是人类可读的
- Pickle 与语言无关
我已将数据保存为 JSON,但我想了解最佳做法:
考虑到所有这些问题,您什么时候会使用泡菜?哪些具体情况需要使用它?
【问题讨论】:
-
顺便说一句,有些格式远比 JSON 更易于人类阅读,并且可以说也更容易编辑。我会想到好的旧 INI 文件和 YAML。它肯定比不透明的二进制流好,但人类可读性不是二进制的东西。
-
我看到将对象保存为 JSON 的第一个缺点:您必须创建序列化程序,这需要一些时间。再加上 JSON 序列化过程的速度最终可能会比简单的泡菜慢。虽然我同意安全方面的缺点。还有一点是:为什么要存储一个对象并让它可以编辑?那岂不是不安全?
-
有螺丝刀为什么还要用锤子?有锤子为什么要用螺丝刀?关键在于为手头的工作选择合适的工具。
-
这与stackoverflow.com/questions/8968884/…基本相同。如果您担心安全性,请不要依赖 pickle 或 JSON。使用更强大的身份验证服务——带有加密密钥的东西。
-
鉴于 pickle 必须做的额外工作(与 JSON 等过度简化的格式相比)以确保找到对已经表示的对象的引用,它一点也不慢。而 json 即使在像
import json; d = [1]; d.append(d); json.dumps(d)这样非常简单的事情上也会引发错误