Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > de.comp.lang.python > #6014
| From | Stefan Schwarzer <sschwarzer@sschwarzer.net> |
|---|---|
| Newsgroups | de.comp.lang.python |
| Subject | [Python-de] Re: konstante Lists, Dictionaries |
| Date | 2023-12-22 21:25 +0100 |
| Message-ID | <bb739d87-abd5-46d6-bc99-b2296a552cbb@sschwarzer.net> (permalink) |
| References | <um4o8m$1mbqm$1@dont-email.me> |
On 2023-12-22 20:32, Markus Schaaf wrote: > habe heute ewig nach einem "unmöglichen" Fehler gesucht, weil ich > nicht gemerkt hatte, dass ein Dictionary von verschiedenen > Coroutinen modifiziert wird. Vor sowas schützt Python in der Tat schlecht. > In typisierten Sprachen würde man > der Coroutine eine konstante Referenz übergeben. Python ist auch "typisiert", aber das Typ-System gibt es nicht her, Änderungen zu kontrollieren. ;-) > Gibt's in Python > Methoden, sich vor solchen Fehlern zu schützen, ohne eine tiefe > Kopie anzulegen? (Oder vielleicht ist das gar nicht so schlimm?) Ein paar bunt gemischte spontane Gedanken dazu ... :-) - Ob tiefe Kopien ein Problem für dein Programm und die darin verarbeiteten Daten sind, musst du ausprobieren. Bei nicht zu riesigen Datenmengen und häufigen Kopien kann es gutgehen. - Versuch, im Design die Konstellation, dass ein Objekt von verschiedenen Stellen geändert wird, von vornherein möglichst zu vermeiden. Ok, das ist zugegebenermaßen sehr schwammig und es hängt von deinem Programm ab, ob sich das gut umsetzen lässt. - Ich versuche, in-place-Änderungen möglichst zu vermeiden und stattdessen modifizierte Objekte zurückzugeben. Sowas ist eher in der Funktionalen Programmierung üblich, klappt aber auch oft in Python einigermaßen erträglich. Je nachdem, was du für Daten hast und wie dein Programmfluss ist, kann das aber auch darauf hinauslaufen, dass du viele tiefe Kopien erzeugst, was ein Problem sein _kann_ (siehe oben). - Recherchiere zu sogenannten persistenten Datenstrukturen. Die funktionieren so, dass bei einer Änderung ein neues Objekt mit den Änderungen erzeugt wird und das ursprüngliche Objekt unverändert bleibt. Anders als bei Python-Listen oder -Dictionaries hängt die Zeit für ein solches "funktionales Update" nicht (wesentlich) von der Größe der Datenstruktur ab. Ich habe bei einer Suche zum Beispiel https://github.com/tobgu/pyrsistent gefunden, kann aber nicht einschätzen, inwieweit das in dein Design passt. Im Zweifelsfall würde ich erst mal versuchen, das Problem mit "Python-Standard-Designs" zu lösen. In dem Zusammenhang würde mich interessieren, wer von euch Erfahrungen mit solchen Datenstrukturen/Bibliotheken in Python hat und wie gut das für euch funktioniert hat. - Python hat, anders als zum Beispiel Rust, kein explizites Ownership-System, aber du kannst dir trotzdem beim Designen überlegen, welches Objekt der Owner eines bestimmten Objekts sein soll. Ich denke, um konkretere Ratschläge zu bekommen, müsstest du deinen Code zeigen beziehungsweise die "konkurrierenden" Code-Teile genauer beschreiben. Davon abgesehen interessiert mich, wie andere Entwickler:innen mit dieser Problematik umgehen. Was habt ihr für Ansätze ausprobiert und was waren eure Erfahrungen? Viele Grüße Stefan
Back to de.comp.lang.python | Previous | Next — Previous in thread | Next in thread | Find similar
konstante Lists, Dictionaries Markus Schaaf <mschaaf@elaboris.de> - 2023-12-22 20:32 +0100
Re: konstante Lists, Dictionaries "Peter J. Holzer" <hjp-usenet4@hjp.at> - 2023-12-22 21:01 +0100
Re: konstante Lists, Dictionaries Markus Schaaf <mschaaf@elaboris.de> - 2023-12-22 22:31 +0100
[Python-de] Re: konstante Lists, Dictionaries Stefan Schwarzer <sschwarzer@sschwarzer.net> - 2023-12-22 21:25 +0100
Re: [Python-de] Re: konstante Lists, Dictionaries Markus Schaaf <mschaaf@elaboris.de> - 2023-12-22 22:47 +0100
csiph-web