Python中的pickle和yaml有什么基本区别?

时间:2013-09-19 17:54:09

标签: python python-2.7 serialization yaml pickle

我对Python很天真。但是,我所知道的是,两者都被用于序列化和反序列化。所以,我只是想知道它们之间的所有基本差异是什么?

2 个答案:

答案 0 :(得分:9)

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

Pickle格式特定于Python,可以表示各种各样的数据结构和对象,例如Python列表,集和词典; Python类的实例;以及这些对象列表的组合;包含包含列表的dicts的对象;等

基本上是这样的:

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

除此之外还有更多,但你要求“基本”差异。

答案 1 :(得分:5)

当python对象转换为字节流并返回时,

pickle是一种特殊的 python序列化格式

  

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

重点是它是特定于python的。

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

仅供参考,如果您选择这些格式,请考虑:

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

另见: