9 ответов:
По словам исходный код максимальный размер списка составляет
PY_SSIZE_T_MAX/sizeof(PyObject*).
PY_SSIZE_T_MAXопределена в pyport.h на((size_t) -1)>>1в обычной 32-битной системе это (4294967295 / 2) / 4 или 536870912.
поэтому максимальный размер списка python в 32-битной системе равен 536,870,912 элементы.
пока количество элементов у вас равно или ниже этого, все функции списка должны действовать правильно.
Как документация Python говорит:
sys.maxsize
самое большое положительное целое число, поддерживаемое типом py_ssize_t платформы, и, следовательно, списки максимального размера, строки, дикты и многие другие контейнеры могут иметь.
в моем компьютере (Linux x86_64):
>>> import sys >>> print sys.maxsize 9223372036854775807
конечно, это нормально. На самом деле вы можете легко убедиться сами:
l = range(12000) l = sorted(l, reverse=True)запуск этих строк на моей машине взял:
real 0m0.036s user 0m0.024s sys 0m0.004sно конечно, как и все остальные сказал. Чем больше массив, тем медленнее будут выполняться операции.
в случайном коде я создал списки с миллионами элементов. Я считаю, что реализация списков Python связана только с объемом памяти в вашей системе.
кроме того, методы / функции списка должны продолжать работать, несмотря на размер списка.
Если вы заботитесь о производительности, возможно, стоит заглянуть в библиотеку, такую как включает в себя.
характеристики производительности для списков описаны на Effbot.
списки Python фактически реализованы как вектор для быстрого произвольного доступа, поэтому контейнер будет в основном содержать столько элементов, сколько есть места в памяти. (Вам нужно пространство для указателей, содержащихся в списке, а также пространство в памяти для объекта(ов), на который указывает.)
добавление
O(1)(амортизированная постоянная сложность), однако, вставка в / удаление из середины из последовательности потребуетсяO(n)(линейная сложность) переупорядочивание, которое будет замедляться по мере увеличения количества элементов в вашем списке.ваш вопрос сортировки является более тонким, так как операция сравнения может занять неограниченное количество времени. Если вы выполняете очень медленные сравнения, это займет много времени, хотя это не вина тип данных списка Python.
разворот просто занимает столько времени, сколько требуется для замены всех указателей в список (обязательно
O(n)(линейная сложность), так как вы касаетесь каждого указателя один раз).
12000 элементов-это ничто в Python... и на самом деле количество элементов может доходить до того, что интерпретатор Python имеет память в вашей системе.
Я бы сказал, что вы ограничены только общим объемом доступной оперативной памяти. Очевидно, что чем больше массив, тем дольше будут выполняться операции над ним.
нет никаких ограничений на номер списка. Основная причина, которая вызывает вашу ошибку, - это ОЗУ. Пожалуйста, обновите объем памяти.

Comments