Python: Wie viel Platz beansprucht jedes Element einer Liste?

8

Ich brauche eine sehr große Liste und versuche herauszufinden, wie groß ich es machen kann, damit es immer noch in 1-2GB RAM passt. Ich verwende die CPython-Implementierung auf 64-Bit (x86_64).

Edit: Dank buas Antwort habe ich einige der konkreteren Antworten ausgefüllt.

Was ist die Speicherbelegung von (in Bytes):

  • die Liste selbst
    • sys.getsizeof([]) == 72
  • jeder Listeneintrag (ohne die Daten)
    • sys.getsizeof([0, 1, 2, 3]) == 104 , also 8 Bytes Overhead pro Eintrag.
  • die Daten, wenn es eine ganze Zahl ist
    • sys.getsizeof(2**62) == 24 (variiert jedoch je nach Integer-Größe)
    • sys.getsizeof(2**63) == 40
    • sys.getsizeof(2**128) == 48
    • sys.getsizeof(2**256) == 66
  • die Daten, wenn es ein Objekt ist ( sizeof(Pyobject) ich denke))
    • sys.getsizeof(C()) == 72 (C ist ein leeres Benutzer-Space-Objekt)

Wenn Sie allgemeinere Daten über die beobachteten Größen teilen können, wäre das großartig. Zum Beispiel:

  • Gibt es spezielle Fälle (ich denke, unveränderliche Werte könnten geteilt werden, also braucht eine Liste von Bools keinen zusätzlichen Platz für die Daten)?
  • Vielleicht nehmen kleine Listen X Bytes Overhead, aber große Listen nehmen Y Bytes Overhead?
Paul Biggar 05.11.2009, 13:04
quelle

2 Antworten

9

Punkt zum Starten:

%Vor%

und von python help:

%Vor%     
bua 05.11.2009, 13:21
quelle
6

Wenn Sie Listen numerischer Werte wünschen, bietet das Standardmodul Array optimierte Arrays (mit einer append-Methode) ).

Das nicht standardmäßige, aber häufig verwendete Modul NumPy bietet Ihnen effiziente Arrays mit fester Größe.

    
EOL 05.11.2009 13:46
quelle

Tags und Links