我对 Python 很幼稚。但是,我开始知道两者都被用于序列化和反序列化。所以,我只想知道它们之间的所有基本区别是什么?
3 回答
YAML 是一种语言中立的格式,可以很好地表示原始类型(int、string 等),并且在语言之间具有高度可移植性。类似于 JSON、XML 或纯文本文件;只是混合了一些有用的格式约定——事实上,YAML 是 JSON 的超集。
Pickle 格式是 Python 特有的,可以表示多种数据结构和对象,例如 Python 列表、集合和字典;Python 类的实例;以及这些对象列表的组合;包含包含列表的dicts的对象;等等
所以基本上:
- YAML 以语言可移植的方式表示简单的数据类型和结构
- pickle 可以表示复杂的结构,但是以非语言可移植的方式
不仅如此,但您要求的是“基本”差异。
当一个 python 对象被转换为字节流并返回时,pickle是一种特殊的python 序列化格式:
“Pickling”是将 Python 对象层次结构转换为字节流的过程,而“unpickling”是逆操作,从而将字节流转换回对象层次结构。
要点是它是特定于python的。
另一方面,YAML 是与语言无关且人类可读的序列化格式。
仅供参考,如果您在这些格式之间进行选择,请考虑:
- 序列化/反序列化速度(参见cPickle模块)
- 您是否需要以人类可读的形式存储序列化文件?
- 你要序列化什么?例如,如果它是一个特定于 python 的复杂数据结构,那么你应该使用 pickle。
也可以看看:
如果一个人读取文件对你来说并不重要,但你只需要保存文件,然后读取它,然后使用pickle。它速度更快,并且二进制文件的重量更轻。
如上所述,YAML 文件更具可读性,但速度较慢且体积较大。
我已经测试了我的应用程序。我测量了将对象上传和下载到文件的时间及其大小。
序列化/反序列化方法 | 平均时间,秒 | 文件大小,kB |
---|---|---|
PyYAML | 1.73 | 1149.358 |
泡菜 | 0.004 | 690.658 |
如您所见,yaml 重 1.67 倍。并且慢了 432,5 倍。
PS这是我的数据。在您的情况下,可能会有所不同。但这足以进行比较。