sju*_*dǝʊ 6 python recursion pickle
我试图挑选我的细胞自动机类的实例,但是我得到了这个错误:
RuntimeError: maximum recursion depth exceeded while calling a Python object
Run Code Online (Sandbox Code Playgroud)
我的细胞自动机由细胞列表(以及其他一些东西)组成,其中每个细胞都有指向它的邻居的指针.在这个特定的CA中,有256个单元.现在,我知道pickler应该能够识别已经被腌制的物体.
来自docs:
*pickle模块跟踪它已经序列化的对象,以便稍后对同一对象的引用不会再次序列化.
所以我真的不知道,为什么我超过了最大递归深度.
我认为也许pickler会进行深度优先酸洗,因此它首先跟随指针,超过递归堆栈然后引发异常.我知道我可以扩展最大递归深度sys.setrecursionlimit()
,但我不认为这个好的也不是可扩展的解决方案.
第一个问题:pickler深度优先酸洗?
第二个问题:任何想法如何防止这种异常?
因此,正如@ExP所说,pickler进行深度优先酸洗,导致递归超出异常.无论如何,我在这里找到了解决这个问题的方法bugs.python.org.这意味着python 3.1 pickler甚至可以在递归数据(例如图形)上工作.
还有一些不太优雅的解决方案,需要花费更多的时间来挑选一些递归数据,但它很简单(只需几行代码).链接在这里.
看起来,现在可能是开始慢慢走向python3的时候了.希望有人发现这个答案有用.