超出python pickler递归深度

2024-05-17 06:34:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试提取我的元胞自动机类的实例,但遇到以下错误:

RuntimeError: maximum recursion depth exceeded while calling a Python object

我的元胞自动机是由一系列单元(和一堆其他东西)组成的,每个单元都有指向其相邻单元的指针。在这个特定的CA中,有256个单元。现在,我知道pickler应该能够识别已经腌制过的物体。在

From docs:
*The pickle module keeps track of the objects it has already serialized, so that later references to the same object won’t be serialized again.

所以我真的不知道,为什么我超过最大递归深度。在

我认为pickler可能会进行深度优先的酸洗,这样它首先跟随指针,超过递归堆栈,然后引发异常。我知道我可以用sys.setrecursionlimit()扩展最大递归深度,但我不认为这是一个好的、不可伸缩的解决方案。在

第一个问题:酸洗器深度是否首先酸洗?
第二个问题:您知道如何防止这种异常吗?在


Tags: the实例自动机元胞object错误serialized单元
1条回答
网友
1楼 · 发布于 2024-05-17 06:34:59

所以,正如@ExP所说,pickler执行深度优先酸洗,这会导致递归超出异常。总之,我在这里找到了这个问题的解决方案bugs.python.org。这意味着,对于python3.1,pickler甚至可以处理递归数据,例如图形。在

还有一个不那么优雅的解决方案,它需要更多的时间来提取一些递归数据,但它很简单(只需要几行代码)。链接here。在

看来,是时候慢慢地向Python移动了。希望有人能找到有用的答案。在

相关问题 更多 >