我正在尝试腌制我的元胞自动机类的实例,但出现此错误:
RuntimeError: maximum recursion depth exceeded while calling a Python object
我的元胞自动机由细胞列表(和一堆其他东西)组成,其中每个细胞都有指向它的邻居的指针。在这个特定的 CA 中,有 256 个单元。现在,我知道pickler 应该能够识别已经腌制的对象。
来自文档:
*pickle 模块跟踪它已经序列化的对象,以便以后对同一对象的引用不会再次被序列化。
所以我真的不知道,为什么我超过了最大递归深度。
我认为也许pickler会进行深度优先酸洗,以便它首先跟随指针,超过递归堆栈然后引发异常。我知道我可以用 扩展最大递归深度sys.setrecursionlimit()
,但我不认为这是好的或可扩展的解决方案。
第一个问题:酸洗深度优先酸洗吗?
第二个问题:知道如何防止这种异常吗?