¿Qué tan grande puede obtener una lista de Python?

En Python, ¿qué tan grande puede obtener una lista? Necesito una lista de unos 12000 elementos. ¿Podré seguir ejecutando métodos de lista como la clasificación, etc.?

Según el código fuente , el tamaño máximo de una lista es PY_SSIZE_T_MAX/sizeof(PyObject*) .

PY_SSIZE_T_MAX se define en pyport.h como ((size_t) -1)>>1

En un sistema regular de 32 bits, esto es (4294967295/2) / 4 o 536870912.

Por lo tanto, el tamaño máximo de una lista de python en un sistema de 32 bits es de 536,870,912 elementos.

Siempre que el número de elementos que tenga sea igual o inferior a este, todas las funciones de la lista deberían funcionar correctamente.

Como dice la documentación de Python :

sys.maxsize

El entero positivo más grande admitido por el tipo Py_ssize_t de la plataforma y, por lo tanto, el tamaño máximo que pueden tener las listas, las cadenas, los dados y muchos otros contenedores.

En mi computadora (Linux x86_64):

 >>> import sys >>> print sys.maxsize 9223372036854775807 

Claro que está bien. En realidad puedes ver por ti mismo fácilmente:

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

Ejecutar esas líneas en mi máquina tomó:

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

Pero seguro como todos los demás dijeron. Cuanto mayor sea la matriz, más lentas serán las operaciones.

En código casual he creado listas con millones de elementos. Creo que la implementación de las listas de Python solo está limitada por la cantidad de memoria en su sistema.

Además, los métodos / funciones de la lista deben continuar funcionando a pesar del tamaño de la lista.

Si le preocupa el rendimiento, podría valer la pena buscar en una biblioteca como NumPy .

12000 elementos no es nada en Python … y en realidad la cantidad de elementos puede llegar tan lejos como el intérprete de Python tenga memoria en su sistema.

Las características de rendimiento de las listas se describen en Effbot.

Las listas de Python en realidad se implementan como vectores para un acceso aleatorio rápido, por lo que el contenedor básicamente contendrá tantos elementos como haya espacio en la memoria. (Necesita espacio para los punteros que figuran en la lista, así como espacio en la memoria para los objetos a los que se apunta).

La anexión es O(1) (complejidad constante amortizada), sin embargo, la inserción / eliminación desde la mitad de la secuencia requerirá una reordenación O(n) (complejidad lineal), que se volverá más lenta según el número de elementos en su lista.

Su pregunta de clasificación tiene más matices, ya que la operación de comparación puede tomar una cantidad de tiempo ilimitada. Si está realizando comparaciones realmente lentas, tomará mucho tiempo, aunque no es culpa del tipo de datos de la lista de Python .

La inversión solo toma la cantidad de tiempo necesario para intercambiar todos los punteros de la lista (necesariamente O(n) (complejidad lineal), ya que toca cada puntero una vez).

Yo diría que solo estás limitado por la cantidad total de RAM disponible. Obviamente, cuanto más grande sea el arreglo, más largas serán las operaciones en él.

Obtuve esto desde aquí en un sistema de x64 bits: Python 3.7.0b5 (v3.7.0b5: abb8802389, 31 de mayo de 2018, 01:54:01) [MSC v.1913 de 64 bits (AMD64)] en win32

introduzca la descripción de la imagen aquí

Varía para diferentes sistemas (depende de la memoria RAM). La forma más fácil de averiguarlo es

import six six.MAXSIZE 9223372036854775807 Esto le da el tamaño máximo de list y dict también, según la documentación

No hay limitación de número de lista. La razón principal que causa su error es la memoria RAM. Por favor actualice el tamaño de su memoria.