Как Большой может получить массив Python?



в Python, как большой может получить массив / список? Мне нужен массив около 12000 элементов. Смогу ли я по-прежнему запускать методы массива/списка, такие как сортировка и т. д.?

634   9  

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 имеет память в вашей системе.

Я бы сказал, что вы ограничены только общим объемом доступной оперативной памяти. Очевидно, что чем больше массив, тем дольше будут выполняться операции над ним.

Я получил это отсюда на 64-разрядной системе: Python 3.7. 0b5 (v3. 7.0b5: abb8802389, май 31 2018, 01:54:01) [MSC V. 1913 64 бит (AMD64)] на win32

enter image description here

нет никаких ограничений на номер списка. Основная причина, которая вызывает вашу ошибку, - это ОЗУ. Пожалуйста, обновите объем памяти.

Comments

    Ничего не найдено.