@pillmuncher,
dein iterativer Ansatz ist sicher eine robuste Lösung mit der man das am Ende gut umsetzen könnte. Denn rekursiv läuft man schon bei einer Feldgröße von 50x50, oder noch früher in Probleme.
Hauptsächlich ging es aber um den Akkumulator bei Verwendung einer Rekursion. Daher bin ich darauf nicht eingegangen.
Ich habe mir den source-code von copy.py angeschaut. Wenn ich das richtig verstehe, werden Compound-Typen rekursiv und type-spezifisch kopiert. Dabei gibt es ein "memo"-Dictionary welches die id zu den verschachtelten Compound-Objekten nachhält. Das verhindert, dass Objekte während des Kopierens der Garbage-Collection zum Opfer fallen? Das memo entspricht dann dem found in deinem Beispiel. Ich vermute, was du damit sagen willst ist, dass es bei einem rekursiven Algorithmus einiges an zusätzlicher Absicherung bedarf um robust zu sein.
Mein ursprünglicher Code hatte tatsächlich das Problem, dass ein zweiter Aufruf der Methode nur None zurückgibt. Das war falsch, habe ich aber später korrigiert.
So, mit Multithreading hast du allerdings Recht. Wenn ich mehreren Threads Zugriff auf das selbe area-Objekt gebe, gibt es Durcheinander. Das passiert bei deinem rekursiven Ansatz mit dem Akkumulator nicht. Ich hab ihn jedenfalls nicht kaputt gekriegt. Dass du von außen auf eine Variable zugreifst, die innerhalb der Methode verändert wurde, finde ich aber immer noch fragwürdig.
Ich habe hier schon einige Threads mitgelesen, bei denen recht kontrovers diskutiert wurde. Am Ende, wenn die Argumente schließlich ausgehen und man sich immer noch nicht einigen konnte, liest man dann "Das mache ich schon seit x Jahren so und da muss das ja wohl stimmen". Das wirkt bei mir alles andere als überzeugend, im Gegenteil. Ich respektiere Erfahrung, aber ich finde hier im Forum ist das nichts worauf man sich berufen kann. Für mich fängt jeder Post bei Null an. Ob das was jemand schreibt, sinnvoll ist, hängt vom Inhalt ab und es muss auch kritischen Gegenfragen standhalten.