Seite 1 von 2

Verfasst: Dienstag 17. April 2007, 16:49
von Mephisto
Ich würde nein sagen, da es noch eine ganze Weile dauern wird bis Python 3000 erscheint. Und eine solch einfache Änderung bewältigt jeder Texteditor der über eine Suchen und Ersetzen Funktion verfügt :)

greets meph

Verfasst: Dienstag 17. April 2007, 16:52
von BlackJack
@rolgal_reloaded: Jup, die Aussagen stimmen so.

Wie immer gibt's Ausnahmen: Wenn Du über Schlüssel, Werte oder Paare davon iterierst und die das Dictionary in der Schleife veränderst, dann kann es Probleme geben. Ähnlich wie bei Listen über die man nicht (vorwärts) iterieren sollte wenn man in der Schleife Listenelemente entfernt.

Verfasst: Dienstag 17. April 2007, 18:57
von rolgal_reloaded
BlackJack hat geschrieben:@rolgal_reloaded: Jup, die Aussagen stimmen so.

Wie immer gibt's Ausnahmen: Wenn Du über Schlüssel, Werte oder Paare davon iterierst und die das Dictionary in der Schleife veränderst, dann kann es Probleme geben. Ähnlich wie bei Listen über die man nicht (vorwärts) iterieren sollte wenn man in der Schleife Listenelemente entfernt.
Denke das habe ich.

Dann stimmt wohl auch, dass das aktuelle Element nachdem es in der Schleife abgearbeitet wurde, sofort aus dem Speicher gelöscht wird, oder?
Sonst wäre es wohl kein so immenser Performancegewinn :?:

Wenn weiters richtig, dann sind die itermethoden auch sehr interessant, wenn innerhalb einer Endlosschleife (while True) z. B. bei einem Vokabeltrainer diese auf Grund einer bestimmten Bedingung verlassen wird (10 Vokabeln hintereinander richtig - Lektionswechsel - neues Dict laden).
Klar und richtig was ich meine?

LG

rolgal_reloaded

Verfasst: Dienstag 17. April 2007, 19:45
von BlackJack
Aus dem Speicher gelöscht wird das Element nicht, es ist ja immer noch im Dictionary. Die Elemente werden ja nur an die Namen in der Schleife gebunden und nicht kopiert.

Verfasst: Dienstag 17. April 2007, 20:42
von rolgal_reloaded
Ich meinte natürlich nicht, dass es aus dem Dictionary gelöscht wird.
Aber aus dem Arbeitsspeicher heisst ja nicht aus dem Dictionary :?: :!:

Oder habe ich da technisch was falsch verstanden?

Also ich meine: das muss ja speichertechnisch irgendwie anders verwaltet werden, wie kann es sonst zu einer Steigerung der Performance kommen?
Denn es geht ja darum, dass nicht die ganze Liste auf einmal erzeugt wird bzw. immer nur das aktuelle Element zur Verfügung steht.

Schwierig das in Worte zu fassen :D


LG

r_r

Verfasst: Dienstag 17. April 2007, 22:28
von BlackJack
Aber man kann doch auch nichts aus dem Arbeitsspeicher löschen wenn es noch in einer Datenstruktur referenziert wird. Was sollte denn dann passieren wenn man über das Dictionary auf das Objekt zugreift!?

Bei den `iter*()`-Methoden wird keine Liste erstellt. Die würde Speicherplatz verbrauchen. Und um die Liste zu erstellen muss einmal über alle Elemente des Dictionary iteriert werden. Wenn man diese Liste dann in einer Schleife verwendet wird ein zweites mal über alle Elemente iteriert. Also gibt's ohne Liste auch einen Geschwindigkeitsgewinn.

Verfasst: Dienstag 17. April 2007, 22:35
von rolgal_reloaded
BlackJack hat geschrieben:Aber man kann doch auch nichts aus dem Arbeitsspeicher löschen wenn es noch in einer Datenstruktur referenziert wird. Was sollte denn dann passieren wenn man über das Dictionary auf das Objekt zugreift!?
Eigentlich logisch, gut dass ich nachgefragt habe bevor ich in eine falsche Richtung weiterdenke.
BlackJack hat geschrieben: Bei den `iter*()`-Methoden wird keine Liste erstellt. Die würde Speicherplatz verbrauchen. Und um die Liste zu erstellen muss einmal über alle Elemente des Dictionary iteriert werden. Wenn man diese Liste dann in einer Schleife verwendet wird ein zweites mal über alle Elemente iteriert. Also gibt's ohne Liste auch einen Geschwindigkeitsgewinn.
Auch wunderbar erklärt, danke.

Also wäre folgendes eines von vielen konkreten Veranschaulichungen, oder?
Wenn weiters richtig, dann sind die itermethoden auch sehr interessant, wenn innerhalb einer Endlosschleife (while True) z. B. bei einem Vokabeltrainer diese auf Grund einer bestimmten Bedingung verlassen wird (10 Vokabeln hintereinander richtig - Lektionswechsel - neues Dict laden).
LG

rolgal_reloaded

Verfasst: Mittwoch 18. April 2007, 08:27
von BlackJack
Jup, wenn das Vokabeldictionary 1000 Einträge enthält und man nach 20 die Schleife abbricht, hat man bei `iter*()` auch nur diese 20 "angefasst".