我注意到用 pickle 加载包含 5000 个对象的字典需要很长时间(分钟)——但是加载包含 5000 个实体的文件的 json 需要很短的时间(秒)。我知道一般情况下,对象会带来一些开销——而在 OOP 中,与跟踪此类对象相关的开销是为了方便使用它们而付出的代价的一部分。但是为什么加载 pickle 对象需要这么长时间。幕后发生了什么?与仅将对象的数据写入文件相比,序列化对象的相关成本是多少? pickle 是否将对象恢复到内存中的相同位置或其他什么? (也许将其他物体移开)。如果序列化加载速度较慢(至少 pickle 是),那有什么好处?
最佳答案
假设您正在使用 Python 2.7 标准 pickle
和 json
模块...
- Python 2.7 使用
pickle
模块的纯 Python 实现默认,尽管可以使用更快的 C 实现。 http://docs.python.org/2/library/pickle.html - 相反,Python 2.7 默认使用
json
模块的优化 C 实现:http://docs.python.org/dev/whatsnew/2.7.html
因此,您基本上是在将纯 Python 反序列化器与优化的 C 反序列化器进行比较。这不是一个公平的比较,即使序列化格式相同也是如此。
关于python - 为什么加载 pickle 对象比加载文件花费的时间长得多?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24275221/