Alcanzando la profundidad máxima de recursión usando Pickle / cPickle

El fondo: estoy construyendo un trie para representar un diccionario, usando un algoritmo de construcción mínimo. La lista de entrada es 4.3M cadenas utf-8, ordenadas lexicográficamente. El gráfico resultante es acíclico y tiene una profundidad máxima de 638 nodos. La primera línea de mi script establece el límite de recursión a 1100 a través desys.setrecursionlimit().

El problema: me gustaría poder serializar mi trie en el disco, así que puedo cargarlo en la memoria sin tener que reconstruir desde cero (aproximadamente 22 minutos). He intentado tantopickle.dump() ycPickle.dump(), con los protocolos tanto de texto como binarios. Cada vez, obtengo un seguimiento de pila que se parece a lo siguiente:

  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

Mis estructuras de datos son relativamente simples:trie contiene una referencia a un estado de inicio y define algunos métodos.dfa_state contiene un campo booleano, un campo de cadena y una asignación de diccionario de etiqueta a estado.

No estoy muy familiarizado con el funcionamiento interno depickle - ¿mi profundidad máxima de recursión debe ser mayor / igual n veces la profundidad del trie para n? ¿O podría ser causado por algo más que desconozco?

Actualizar: Establecer la profundidad de recursión en 3000 no ayudó, por lo que esta avenida no parece prometedora.

Actualización 2: Ustedes tenían razón; Estaba siendo miope al suponer que Pickle usaría una pequeña profundidad de anidamiento debido a las limitaciones de recursión predeterminadas. 10.000 hicieron el truco.

Respuestas a la pregunta(5)

Su respuesta a la pregunta