11.5. marshal-内部 Python 对象序列化

该模块包含可以以二进制格式读取和写入 Python 值的函数。该格式专用于 Python,但与计算机体系结构问题无关(例如,您可以将 Python 值写入 PC 上的文件,将文件传输到 Sun,然后在此处读取)。该格式的详细信息未有意记录在案;它可能会在 Python 版本之间发生变化(尽管很少会发生变化)。 [1]

这不是通用的“持久性”模块。有关pass RPC 调用进行 Python 对象的一般持久性和传输的信息,请参见模块pickleshelvemarshal模块主要用于支持读写.pyc文件的 Python 模块的“伪编译”代码。因此,如果需要,Python 维护者保留以向后不兼容的方式修改封送格式的权利。如果您要对 Python 对象进行序列化和反序列化,请改用pickle模块-性能可比,可以保证版本独立性,并且 pickle 支持的对象范围远超过编组。

Warning

marshal模块并非旨在防止错误或恶意构建的数据。切勿对从不可信或未经身份验证的来源收到的数据进行封送处理。

并非所有 Python 对象类型都受支持;通常,此模块只能写入和读取其值与特定的 Python 调用无关的对象。支持以下类型:布尔值,整数,长整数,浮点数,复数,字符串,Unicode 对象,Tuples,列表,集合,frozenset,字典和代码对象,应理解为 Tuples,列表,集合,仅支持冻结集和字典,只要其中包含的值本身受支持即可;以及递归列表,集合和字典(它们将导致无限循环)。单例NoneEllipsisStopIteration也可以编组和解组。

Warning

在 C 的long int类型具有超过 32 位的机器上(例如 DEC Alpha),可以创建长于 32 位的纯 Python 整数。如果将这样的整数编组并在 C 的long int类型只有 32 位的计算机上读回,则会返回 Python 长整数对象。当类型不同时,数值相同。 (此行为是 Python 2.2 中的新Function.在较早的版本中,该值中除最低有效的 32 位之外的所有位都丢失了,并显示警告消息.)

有一些读/写文件的Function以及对字符串进行操作的Function。

该模块定义了以下Function:

如果该值具有(或包含具有该对象的)不支持的类型,则会引发ValueError异常-但垃圾数据也将写入该文件。 load()无法正确读回该对象。

2.4 版中的新增Function:* version *参数指示dump应该使用的数据格式(请参见下文)。

Note

如果包含不支持类型的对象已使用dump()编组,则load()将用None代替不可编组的类型。

2.4 版中的新增Function:* version *参数指示dumps应该使用的数据格式(请参见下文)。

此外,还定义了以下常量:

2.4 版的新Function。

Footnotes

首页