Uderzanie w maksymalną głębokość rekursji przy użyciu pikli / cPickle

Tło: Buduję trie do reprezentowania słownika, używając minimalnego algorytmu konstrukcyjnego. Lista wejściowa to 4.3M ciągów utf-8, posortowanych leksykograficznie. Wynikowy wykres jest acykliczny i ma maksymalną głębokość 638 węzłów. Pierwszy wiersz mojego skryptu ustawia limit rekursji na 1100 przezsys.setrecursionlimit().

Problem: chciałbym móc serializować mój trie na dysk, więc mogę załadować go do pamięci bez konieczności przebudowy od podstaw (około 22 minut). Próbowałem obupickle.dump() icPickle.dump(), zarówno z protokołem tekstowym, jak i binarnym. Za każdym razem otrzymuję ślad stosu, który wygląda następująco:

  File "/System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/pickle.py", line 649, in save_dict
    self._batch_setitems(obj.iteritems())
  File "/System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/pickle.py", line 663, in _batch_setitems
    save(v)
  File "/System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/pickle.py", line 286, in save
    f(self, obj) # Call unbound method with explicit self
  File "/System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/pickle.py", line 725, in save_inst
    save(stuff)
  File "/System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/pickle.py", line 286, in save
    f(self, obj) # Call unbound method with explicit self
  File "/System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/pickle.py", line 648, in save_dict
    self.memoize(obj)
RuntimeError: maximum recursion depth exceeded

Moje struktury danych są stosunkowo proste:trie zawiera odniesienie do stanu początkowego i definiuje niektóre metody.dfa_state zawiera pole logiczne, pole tekstowe i słownik mapujący z etykiety na stan.

Nie jestem zaznajomiony z wewnętrznym działaniempickle - czy moja maksymalna głębokość rekurencji musi być większa / równa n razy głębokość trie dla niektórych n? A może przyczyną może być coś, czego nie znam?

Aktualizacja: Ustawienie głębokości rekurencji na 3000 nie pomogło, więc ta aleja nie wygląda obiecująco.

Aktualizacja 2: Mieliście rację; Byłem krótkowzroczny, zakładając, że pikle będą używać małej głębokości gniazdowania z powodu domyślnych ograniczeń rekurencji. 10 000 załatwiło sprawę.

questionAnswers(5)

yourAnswerToTheQuestion