marshal 模块,和 pickle 模块功能基本相同,也是序列化数据,只不过 marshal 都序列化成二进制数据,由于没有官方统一,不同版本 marshal 的结果也会不一样,所以不推荐使用。marshal 的存在主要是支持 pyc 文件,它支持布尔值,各种数值,字符串,unicode对象,包含这些对象的容器。marshal 与 pickle 的不同有以下几个方面:

1、结果大小不同,所以可以看情况使用,一般还是用 pickle。

2、marshal 会对同一个对象的引用序列化好多次,而 pickle 会跟踪记录,只会序列化一次。

3、pickle 可以序列化递归对象,marshal 会报错。

4、marshal 不能序列化类和实例

模块方法:

marshal.dump(value, file[, version]):把 value 序列化到以二进制打开的文件中,version指定模块使用的格式(0:老格式;1:共享内部字符串;2:对浮点数二进制)
marshal.load(file):把以二进制打开的文件 file 反序列化读取
marshal.dumps(value[, version]):序列化 value 为一个字符串
marshal.loads(string):反序列化 string