Ich versuche Instanz meiner zellulären Automaten Klasse beizen, aber ich habe diesen Fehler:Python pickler - Rekursionstiefe überschritten
RuntimeError: maximum recursion depth exceeded while calling a Python object
Meine zellulären Automaten aus der Liste aus Zellen bestehen (und Haufen anderer Dinge) wo jede Zelle einen Zeiger auf ihre Nachbarn hat. In diesem speziellen CA gibt es 256 Zellen. Jetzt weiß ich, dass der Abbeißer bereits gebeizte Objekte erkennen kann.
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.
Also ich weiß nicht wirklich, warum ich die maximale Rekursionstiefe überschreite.
Ich denke, dass vielleicht Pickler Tiefe erste Beizen, so dass es zuerst folgen Zeiger, Rekursionstapel überschreiten und dann Ausnahme auslösen. Ich weiß, dass ich die maximale Rekursionstiefe mit sys.setrecursionlimit()
erweitern kann, aber ich halte das nicht für eine gute oder skalierbare Lösung.
Erste Frage: Ist der Pickler tief in die Tiefe gebeizt?
Zweite Frage: Haben Sie eine Idee, wie Sie diese Ausnahme verhindern können?
Code, den Sie posten können? –
Ja, "Gurke" geht Tiefe zuerst. Leider denke ich nicht, dass es da eine gibt. Versuchen Sie 'cPickle', aber es wird wahrscheinlich den gleichen Fehler geben. –
@AswinMurugesh eigentlich habe ich zu viel Code zu posten. Hier sind jedoch einige wichtige Dateien, wenn Sie interessiert sind: [Nachbarschaft] (https://github.com/mirobeka/cellular-automata/blob/master/cellular_automata/lattices/neighbourhoods.py) [Zelle] (https://github.com/mirobeka/cellular-automata/blob/master/cellular_automata/cells/regular.py#L21) [pickling] (https://github.com/mirobeka/cellular-automata/blob/master/cellular_automata/ Gitter/Equiangular.py # L210) Exp: cPickle ist das gleiche, ich habe es schon einmal versucht. Ich hatte Angst vor dieser Antwort –