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

nir*_*rat 5 python serialization yaml pickle python-2.7

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

Chr*_*son 9

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

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

所以基本上:

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

还有更多,但你要求"基本"差异.


ale*_*cxe 5

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

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

重点是它是特定于python的.

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

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

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

也可以看看: