Warum tritt ein MemoryError auf?
Verfasst: Freitag 9. März 2018, 14:01
Hallo zusammen,
ich spiele aus einer Laune heraus gerade mit folgendem. Vorab: Ja, ich bin mir bewusst das man eine (potentiell) große Datei nicht wie hier gezeigt öffnen sollte, dennoch interessiert mich was da passiert aus akademischem Wissensdurst heraus:
Ich habe rund 10 GB RAM frei:
Ich habe unter /home/mrichter/Downloads/Aufheben/openSUSE-Leap-42.3-DVD-x86_64.iso eine rund 4,4 GB große ISO Datei liegen:
Annahme: Die müsste locker in meinen RAM passen.
Also mache ich folgendes unter Python 3.6.3:
Meine Frage: Wieso passiert das? Gibt es da eine "magische Grenze" in Python für die Variablenzuweisung o.ä.? Zum Zeitpunkt des MemoryErrors war noch rund 6 GB RAM frei.
ich spiele aus einer Laune heraus gerade mit folgendem. Vorab: Ja, ich bin mir bewusst das man eine (potentiell) große Datei nicht wie hier gezeigt öffnen sollte, dennoch interessiert mich was da passiert aus akademischem Wissensdurst heraus:
Ich habe rund 10 GB RAM frei:
Code: Alles auswählen
$ free -m
gesamt benutzt frei gemns. Puffer/Cache verfügbar
Speicher: 15683 4033 8458 668 3192 10714
Auslagerungsspeicher: 0 0 0
Code: Alles auswählen
$ readlink -f openSUSE-Leap-42.3-DVD-x86_64.iso
/home/mrichter/Downloads/Aufheben/openSUSE-Leap-42.3-DVD-x86_64.iso
$ ls -lh openSUSE-Leap-42.3-DVD-x86_64.iso
-rw-r--r-- 1 mrichter mrichter 4,4G Jan 30 17:45 openSUSE-Leap-42.3-DVD-x86_64.iso
Also mache ich folgendes unter Python 3.6.3:
Code: Alles auswählen
import os
os.chdir('/home/mrichter/Downloads/Aufheben')
with open('openSUSE-Leap-42.3-DVD-x86_64.iso') as isofile:
isocontent = isofile.read()
Traceback (most recent call last):
File "/home/mrichter/.virtualenvs/pycharm3.6.3/lib/python3.6/site-packages/IPython/core/interactiveshell.py", line 2869, in run_code
exec(code_obj, self.user_global_ns, self.user_ns)
File "<ipython-input-4-88075b2fd8ed>", line 2, in <module>
isocontent = isofile.read()
File "/home/mrichter/.virtualenvs/pycharm3.6.3/lib/python3.6/codecs.py", line 321, in decode
(result, consumed) = self._buffer_decode(data, self.errors, final)
MemoryError