Memoryerror nach append-Befehl

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
Benutzeravatar
pywald
User
Beiträge: 45
Registriert: Mittwoch 6. Januar 2021, 15:51

Hallo,
Ich habe eine Liste, die fünf Elemente beinhaltet.Diese will ich dann mit join zu einem String zusammensetzen.
Aber ich bekomme statt der fünf Elemente nur einen Memoryerror.
Danke im voraus
pywald
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Bitte liefere eine einfaches Programm, dass diese problem reproduzierbar macht für uns. Dann kann man sich das anschauen.
Benutzeravatar
pywald
User
Beiträge: 45
Registriert: Mittwoch 6. Januar 2021, 15:51

Habe dass Problem selber gelöst.
pywald
einfachTobi
User
Beiträge: 512
Registriert: Mittwoch 13. November 2019, 08:38

Es wäre schön, wenn du deine Lösung hier postest, damit auch andere auf der Suche nach einer Lösung davon profitieren können. Selbst wenn es ein absoluter Anfängerfehler oder ein Vertipper oder Sonstwas war, kann es jemandem auf die Sprünge helfen.
Benutzeravatar
DeaD_EyE
User
Beiträge: 1240
Registriert: Sonntag 19. September 2010, 13:45
Wohnort: Hagen
Kontaktdaten:

Wenn man z.B. eine Liste mit ganz vielen Strings hat und diese mit der join-Methode verknüpft, benötigt man den doppelten Speicher, da die einzelnen Strings weiterhin als Objekte im Speicher existieren, bis man die Referenz löscht und das Objekt durch den garbage collector gelöscht worden ist.

Kann man sogar selbst reproduzieren:

Code: Alles auswählen

a = "a" * 64 * 1024 ** 3
Der String wäre dann 64 GiB groß. Ich denke mal, dass niemand hier soviel RAM + SWAP hat.

Vorsicht, der Code kann sogar zum Absturz des gesamten Systems führen.
Wenn man lange genug wartet, bekommt man irgendwann einen memory error.

Ich konnte ihn leider nicht reproduzieren. Vor dem Testen am besten den Swap deaktivieren.
andre@andre-GP70-2PE:~$ ipython
Python 3.9.1 (default, Dec 18 2020, 11:19:32)
Type 'copyright', 'credits' or 'license' for more information
IPython 7.20.0 -- An enhanced Interactive Python. Type '?' for help.

In [1]: a = "a" * 4 * 1024 ** 3

In [2]: a = "a" * 4 * 1024 ** 3

In [3]: a = "a" * 4 * 1024 ** 3

In [4]: a = "a" * 6 * 1024 ** 3

In [5]: a = "a" * 10 * 1024 ** 3
Getötet
sourceserver.info - sourceserver.info/wiki/ - ausgestorbener Support für HL2-Server
einfachTobi
User
Beiträge: 512
Registriert: Mittwoch 13. November 2019, 08:38

Das ist mir klar. Mir geht es da eher um das Prinzip eines Forums :-)
Benutzeravatar
pywald
User
Beiträge: 45
Registriert: Mittwoch 6. Januar 2021, 15:51

einfachTobi hat geschrieben: Freitag 5. Februar 2021, 10:42 Es wäre schön, wenn du deine Lösung hier postest, damit auch andere auf der Suche nach einer Lösung davon profitieren können. Selbst wenn es ein absoluter Anfängerfehler oder ein Vertipper oder Sonstwas war, kann es jemandem auf die Sprünge helfen.
Ich habe eine Liste, während sie angezeigt wurde, bearbeitet (Anfängerfehler).
pywald
Antworten