web-dev-qa-db-fra.com

Quelle taille un tableau Python peut-il obtenir?

En Python, quelle taille un tableau ou une liste peut-il avoir? J'ai besoin d'un tableau d'environ 12 000 éléments. Est-ce que je pourrai toujours utiliser des méthodes tableau/liste telles que le tri, etc.?

96
Devoted

Selon le code source _, la taille maximale d'une liste est PY_SSIZE_T_MAX/sizeof(PyObject*).

PY_SSIZE_T_MAX est défini dans pyport.h pour être ((size_t) -1)>>1

Sur un système 32 bits classique, il s’agit du numéro (4294967295/2)/4 ou 536870912.

Par conséquent, la taille maximale d'une liste python sur un système 32 bits est de 536 870 912 éléments. 

Tant que le nombre d'éléments que vous avez est égal ou inférieur à celui-ci, toutes les fonctions de liste devraient fonctionner correctement.

170
Unknown

Comme le dit le { la documentation Python } _:

sys.maxsize

Le plus grand nombre entier positif pris en charge par le type Py_ssize_t de la plate-forme, et donc les listes de taille maximale, les chaînes, les dicts et de nombreux autres conteneurs.

Sur mon ordinateur (Linux x86_64):

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

Sûr que c'est OK. En fait, vous pouvez voir par vous-même facilement:

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

Courir les lignes sur ma machine a pris:

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

Mais bien sûr, comme tout le monde l'a dit. Plus le tableau est grand, plus les opérations seront lentes.

25
Nadia Alramli

Dans le code occasionnel, j'ai créé des listes avec des millions d'éléments. Je pense que l'implémentation de listes par Python est uniquement liée à la quantité de mémoire disponible sur votre système. 

De plus, les méthodes/fonctions de la liste devraient continuer à fonctionner malgré la taille de la liste. 

Si vous vous souciez de la performance, il pourrait être intéressant de consulter une bibliothèque telle que NumPy .

6
Doug

12 000 éléments n’est rien en Python ... et en réalité, le nombre d’éléments peut aller aussi loin que la mémoire de l’interprète Python sur votre système.

5
AlbertoPL

Les caractéristiques de performance des listes sont décrites dans Effbot.

Les listes Python sont réellement implémentées en tant que vecteur pour un accès aléatoire rapide. Le conteneur contiendra donc autant d'éléments qu'il y a d'espace en mémoire. (Vous avez besoin d'espace pour les pointeurs contenus dans la liste, ainsi que d'un espace en mémoire pour le ou les objets pointés.)

L’ajout de O(1) (complexité constante amortie) est ajouté; toutefois, l’insertion/la suppression à partir du milieu de la séquence nécessitera une réorganisation de O(n) (complexité linéaire) qui ralentira avec le nombre d’éléments de votre liste.

Votre question de tri est plus nuancée, car l'opération de comparaison peut prendre un temps illimité. Si vous effectuez des comparaisons très lentes, cela prendra beaucoup de temps, même si ce n'est pas la faute du type de données de liste de Python .

L'inversion prend simplement le temps nécessaire pour échanger tous les pointeurs de la liste (nécessairement O(n) (complexité linéaire), car vous touchez chaque pointeur une fois).

5
cdleary

Je dirais que vous n'êtes limité que par la quantité totale de RAM disponible. Évidemment, plus le tableau est grand, plus les opérations seront longues.

1
Wayne Koorts

Je l’ai obtenu sur un système x64: Python 3.7.0b5 (v3.7.0b5: abb8802389, 31 mai 2018, 01:54:01) [MSC v.1913 64 bit (AMD64)] sur win32

 enter image description here

0
user2063329

Cela varie selon les systèmes (dépend de la RAM). La meilleure façon de le savoir est

import six six.MAXSIZE 9223372036854775807 Ceci donne également la taille maximale de list et dict, comme indiqué dans documentation

0
yunus