2009-03-05 8 views
4

Gibt es eine vorhandene Implementierung einer iterativen Version von deepcopy für Python 2.5.2? Die Deepcopy-Methode, die vom Kopiermodul verfügbar ist, ist rekursiv und schlägt bei großen Bäumen fehl. Ich bin nicht in der Lage, das Stack-Limit zur Laufzeit sicher zu erhöhen.Iterative Version von Pythons dedecopy

EDIT

ich das tat nach unten verfolgen:

http://code.activestate.com/recipes/302535/

Ich habe es nicht getestet, aber es sieht aus wie es Potenzial hat.

+0

Wow - wie groß ein Baum reden Sie? – Dana

+0

einige hunderttausend Tipps. Ich kann mich nicht an die Gesamtzahl der internen Knoten erinnern. – daniel

+0

Was ist die Tiefe der längsten Verzweigung? – fulmicoton

Antwort

1

Ich bin mir nicht sicher, dass das Sinn machen würde. Ist nicht der ganze Sinn von deepcopy, dass jedes Objekt seine Kinder bitten wird, sich selbst zu kopieren?

Vermutlich weißt du genau, was für ein Objekt du kopierst und wie seine Kinder aussehen. Wenn ich du wäre, würde ich einfach meine eigene Funktion schreiben, um es zu kopieren. Sollte nicht zu schwer sein.

+2

Nein, sollte nicht schwer sein. Aber wir haben häufig die Rekursionsgrenze erreicht. Ich würde eine gut missbrauchte und robuste vorherige Implementierung bevorzugen, die mit beliebigen Objekten umgehen kann. – daniel

+0

von häufig, ich meine, jeder Code, den wir haben, der auf Rekursion beruht neigt dazu, irgendwann zu brechen. Wir haben einen informellen Block für die Übertragung von rekursivem Code in unser Softwarepaket eingerichtet. – daniel

+1

To Ben> Ich denke, Daniel will eine Version von decopy, die das gleiche tut wie die aktuelle, aber nicht für Bäume, die zu tief sind. Der Prozess des Schreibens eines logisch rekursiven Algorithmus in iterativ wird so etwas wie Derecursivation genannt. – fulmicoton

0

Vielleicht wäre es als solche arbeiten mit Stackless Python

+0

muss ohne Probleme auf einer vorhandenen Softwareplattform funktionieren, die> 50.000 Zeilen Python/NumPy/Matplotlib/C/Pyrex über eine Vielzahl von Architekturen hinweg enthält. Ich würde mich scheissen, wenn der Übergang ohne Erfolg wäre. Obwohl ich stimme zu, es gibt Vorteile für stackless. – daniel