1

我正在尝试在 python 中实现一个序列化程序,它试图做这样的事情。

如果对象 Foo 具有对 Bar 的前向引用,则序列化程序将转储 Foo 中的所有数据,并将该引用转换为 Bar 的数据转储。对于任意深度,事情都会像这样递归地完成。

但是我在使用这种方法时遇到了一个问题,即循环引用,如果 Foo 引用 Bar 和 Bar 引用 Foo 怎么办?然后将创建无限递归。

有什么方法可以解决这个问题。

注意:我无法控制要序列化的数据,因此不能排除循环引用。

4

3 回答 3

2

使用深度优先搜索预先展平结构,记录它看到的项目。为每个对象分配一个 id 并用 id 引用替换对象引用。

(本质上,把它变成一个图表。)

于 2011-03-24T19:36:01.723 回答
1

研究通过序列化自动处理循环引用的 Python pickle 模块。它使用对象 ID 来存储引用。 Python 2.6.6 的源代码在这里

于 2011-03-24T21:46:51.043 回答
1

保留您已经序列化的对象列表。您尝试序列化的每个对象都应对照此列表进行检查。一个类似的方法是在每个对象中切换一个布尔值,以确定它是否已经被序列化,因此不会继续这个对象。

于 2011-03-25T13:41:19.920 回答