Koordinaten benachbarter Felder (2D) mit demselben Inhalt ermitteln. Starthilfe gesucht!

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
rogerb
User
Beiträge: 878
Registriert: Dienstag 26. November 2019, 23:24

@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.
__deets__
User
Beiträge: 14529
Registriert: Mittwoch 14. Oktober 2015, 14:29

Es geht bei memo nicht um die Vermeidung von GC. Sondern um die Unterbrechung von Zyklen. Sowas hier

l = []
l.append(l)

würde sonst eine Endlosrekursion auslösen.
Antworten