it-swarm.com.de

Wie groß kann ein Python-Array werden?

Wie groß kann ein Array/eine Liste in Python werden? Ich brauche ein Array von etwa 12000 Elementen. Kann ich weiterhin Array-/Listenmethoden wie Sortieren usw. ausführen?

96
Devoted

Entsprechend dem Quellcode ist die maximale Größe einer Liste PY_SSIZE_T_MAX/sizeof(PyObject*).

PY_SSIZE_T_MAX ist in pyport.h als ((size_t) -1)>>1 definiert.

Bei einem normalen 32-Bit-System ist dies (4294967295/2)/4 oder 536870912.

Daher ist die maximale Größe einer Python-Liste auf einem 32-Bit-System 536,870,912 -Elemente. 

Solange die Anzahl der Elemente gleich ist oder darunter liegt, sollten alle Listenfunktionen korrekt funktionieren.

170
Unknown

Wie die Python-Dokumentation sagt :

sys.maxsize

Die größte positive ganze Zahl, die vom Py_ssize_t-Typ der Plattform unterstützt wird, und somit die maximale Größenliste, Zeichenfolgen, Diktate und viele andere Container.

In meinem Computer (Linux x86_64):

>>> import sys
>>> print sys.maxsize
9223372036854775807
44
Álvaro Justen

Sicher ist es OK. Eigentlich kann man leicht sehen:

l = range(12000)
l = sorted(l, reverse=True)

Das Ausführen dieser Zeilen auf meinem Computer hat Folgendes erfordert:

real    0m0.036s
user    0m0.024s
sys  0m0.004s

Aber sicher, wie alle anderen sagten. Je größer das Array ist, desto langsamer werden die Operationen.

25
Nadia Alramli

In Gelegenheitscode habe ich Listen mit Millionen von Elementen erstellt. Ich bin der Meinung, dass die Implementierung von Listen in Python nur von der Menge des Speichers auf Ihrem System abhängig ist. 

Außerdem sollten die Listenmethoden funktionen trotz der Größe der Liste weiterhin funktionieren. 

Wenn Sie Wert auf Leistung legen, lohnt es sich vielleicht, in eine Bibliothek wie/- NumPy zu schauen.

6
Doug

12000 Elemente sind nichts in Python ... und tatsächlich kann die Anzahl der Elemente so weit gehen, dass der Python-Interpreter Speicher auf Ihrem System hat.

5
AlbertoPL

Leistungsmerkmale für Listen sind auf Effbot beschrieben.

Python-Listen werden tatsächlich als Vektor für den schnellen Direktzugriff implementiert. Daher enthält der Container im Wesentlichen so viele Elemente, wie im Arbeitsspeicher Platz ist. (Sie benötigen Platz für die in der Liste enthaltenen Zeiger sowie Speicherplatz für die Objekte, auf die gezeigt wird.)

Das Anhängen ist O(1) (amortisierte konstante Komplexität), jedoch erfordert das Einfügen in/Löschen aus der Mitte der Sequenz eine O(n) (lineare Komplexität) Umordnung, die mit der Anzahl der Elemente in Ihrer Liste langsamer wird.

Ihre Sortierfrage ist differenzierter, da der Vergleichsvorgang unbegrenzte Zeit in Anspruch nehmen kann. Wenn Sie wirklich langsame Vergleiche durchführen, wird dies sehr lange dauern, obwohl der Python-Listendatentyp nicht fehlerhaft ist.

Die Umkehrung nimmt nur die Zeit in Anspruch, die erforderlich ist, um alle Zeiger in der Liste auszutauschen (notwendigerweise O(n) (lineare Komplexität), da Sie jeden Zeiger einmal berühren).

5
cdleary

Ich würde sagen, Sie sind nur durch die Gesamtmenge von RAM verfügbar. Je größer das Array ist, desto länger dauert die Operation.

1
Wayne Koorts

Ich habe das hier von einem x64-Bit-System erhalten: Python 3.7.0b5 (v3.7.0b5: abb8802389, 31. Mai 2018, 01:54:01) [MSC v.1913 64 bit (AMD64)] unter Win32

 enter image description here

0
user2063329

Sie variiert für verschiedene Systeme (abhängig vom RAM). Der einfachste Weg, das herauszufinden, ist

import six six.MAXSIZE 9223372036854775807 Dies gibt auch die maximale Größe von list und dict gemäß der Dokumentation an

0
yunus