Ich habe ja bereits vorher die Frage gestellt, ob es eine Regel in Python ist, dass
eine globale Variable im Programm einen Wert hat, der in der Methode neu definiert werden kann,
aber beim verlassen der Methode wieder auf den Wert außerhalb der Methode zurückgesetzt wird?
Objekt hat kein Attribut <hier Namen der Funktion einfügen>
@Tobs: Ähm Du setzt diese globale Variable doch ganz offensichtlich *selbst* immer wieder auf diesen langen Ausgangswert. Nämlich jedes mal wenn die Methode rekursiv aufgerufen wird.
@Tobs: Das Verhalten was Du beschreibst kann so nicht sein. Wenn da nach dem Ablauf der Methode wieder der Wert vor dem Ablauf der Methode an den globalen Namen gebunden ist, dann muss das irgendwo explizit in Deinem Code, den Du nicht zeigst, passieren. Von alleine passiert das *selbstverständlich nicht*.
Die Variable taucht nur an 4 Stellen auf:
Im Hauptprogramm: -ganz oben Loesung = [Liste mit vielen Elementen]
-ganz unten(print(Loesung))
In der Funktion: -oben: global Loesung
-mitte: Loesung = Zuege <---Zuege ist auch ne Liste
Im Hauptprogramm: -ganz oben Loesung = [Liste mit vielen Elementen]
-ganz unten(print(Loesung))
In der Funktion: -oben: global Loesung
-mitte: Loesung = Zuege <---Zuege ist auch ne Liste
@Tobs: Ähm mir fällt gerade auf Du *veränderst* die Liste. Das ist Dir klar, oder? Vielleicht möchtest Du an der Stelle ja eine *Kopie* der `Zuege`-Liste an `Loesung` binden. Und/oder das beim rekursiven Aufruf machen.
Die Liste mit den Elementen ist praktisch nur ein Platzhalter, der die Bedingung in der späteren Funktion erfüllen soll,
dass, egal wie lang die erste Lösung ist, die Liste immer ein Element länger ist, damit sie übernommen wird.
Er speichert die bisher schnellste Lösung in dieser Variable
dass, egal wie lang die erste Lösung ist, die Liste immer ein Element länger ist, damit sie übernommen wird.
Er speichert die bisher schnellste Lösung in dieser Variable
@Tobs: Du *veränderst* die *Zuege*-Liste, nachdem Du sie an `Loesung` gebunden hast. Wenn Du die Liste danach veränderst, nun dann veränderst Du die Liste. Und deswegen hast Du am Ende etwas anderes in der Liste stehen als zu dem Zeitpunkt an dem Du sie an das globale `Loesung` gebunden hast. Was im Grunde passiert ist das hier:
Du willst eine *Kopie* von `zuege` an `loesung` binden und nicht die *selbe* Liste.
Code: Alles auswählen
In [12]: zuege = [1, 2, 3]
In [13]: loesung = zuege
In [14]: zuege.append(42)
In [15]: zuege
Out[15]: [1, 2, 3, 42]
In [16]: loesung
Out[16]: [1, 2, 3, 42]