6

我对 Python 很幼稚。但是,我开始知道两者都被用于序列化和反序列化。所以,我只想知道它们之间的所有基本区别是什么?

4

3 回答 3

10

YAML 是一种语言中立的格式,可以很好地表示原始类型(int、string 等),并且在语言之间具有高度可移植性。类似于 JSON、XML 或纯文本文件;只是混合了一些有用的格式约定——事实上,YAML 是 JSON 的超集。

Pickle 格式是 Python 特有的,可以表示多种数据结构和对象,例如 Python 列表、集合和字典;Python 类的实例;以及这些对象列表的组合;包含包含列表的dicts的对象;等等

所以基本上:

  • YAML 以语言可移植的方式表示简单的数据类型和结构
  • pickle 可以表示复杂的结构,但是以非语言可移植的方式

不仅如此,但您要求的是“基本”差异。

于 2013-09-19T18:00:48.047 回答
5

当一个 python 对象被转换为字节流并返回时,pickle是一种特殊的python 序列化格式:

“Pickling”是将 Python 对象层次结构转换为字节流的过程,而“unpickling”是逆操作,从而将字节流转换回对象层次结构。

要点是它是特定于python的。

另一方面,YAML 是与语言无关且人类可读的序列化格式。

仅供参考,如果您在这些格式之间进行选择,请考虑:

  • 序列化/反序列化速度(参见cPickle模块)
  • 您是否需要以人类可读的形式存储序列化文件?
  • 你要序列化什么?例如,如果它是一个特定于 python 的复杂数据结构,那么你应该使用 pickle。

也可以看看:

于 2013-09-19T18:02:44.250 回答
1

如果一个人读取文件对你来说并不重要,但你只需要保存文件,然后读取它,然后使用pickle。它速度更快,并且二进制文件的重量更轻。

如上所述,YAML 文件更具可读性,但速度较慢且体积较大。

我已经测试了我的应用程序。我测量了将对象上传和下载到文件的时间及其大小。

序列化/反序列化方法 平均时间,秒 文件大小,kB
PyYAML 1.73 1149.358
泡菜 0.004 690.658

如您所见,yaml 重 1.67 倍。并且慢了 432,5 倍。

PS这是我的数据。在您的情况下,可能会有所不同。但这足以进行比较。

于 2021-10-01T14:20:35.133 回答