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

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

Ответ 1

В соответствии с исходным кодом максимальный размер списка 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.

Пока количество элементов, которые у вас есть, равно или ниже этого, все функции списка должны работать правильно.

Ответ 2

Как Документация Python говорит:

sys.maxsize

Наибольшее положительное целое число, поддерживаемое типами Py_ssize_t, и, таким образом, могут иметь списки максимального размера, строки, dicts и многие другие контейнеры.

На моем компьютере (Linux x86_64):

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

Ответ 3

Конечно, все в порядке. На самом деле вы можете легко убедиться:

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

Запуск этих строк на моей машине занял:

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

Но уверен, как все говорили. Чем больше массив, тем медленнее будут операции.

Ответ 4

В случайном коде я создал списки с миллионами элементов. Я считаю, что реализация списков Python связана только с объемом памяти в вашей системе.

Кроме того, методы/функции списка должны продолжать работать, несмотря на размер списка.

Если вы заботитесь о производительности, возможно, стоит посмотреть в библиотеку, такую ​​как NumPy.

Ответ 5

Характеристики эффективности для списков описаны в файле Effbot.

Списки Python фактически реализованы как вектор для быстрого случайного доступа, поэтому в контейнере будет в основном храниться столько элементов, сколько места в памяти. (Вам нужно место для указателей, содержащихся в списке, а также пространство в памяти для указаний на объект (ы).)

Добавляет O(1) (амортизированная постоянная сложность), однако для вставки/удаления из середины последовательности потребуется переупорядочение O(n) (линейная сложность), которое будет замедляться по мере того, как количество элементов в вашем списке.

Ваш вопрос сортировки более нюансирован, так как операция сравнения может принимать неограниченное количество времени. Если вы выполняете очень медленные сравнения, это займет много времени, хотя это не ошибка Тип данных списка Python.

Сторнирование просто требует времени, необходимого для замены всех указателей в списке (обязательно O(n) (линейная сложность), так как вы касаетесь каждого указателя один раз).

Ответ 6

12000 элементов ничего в Python... и на самом деле количество элементов может зайти так далеко, как интерпретатор Python имеет память в вашей системе.

Ответ 7

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

Ответ 8

Нет ограничения номера списка. Основной причиной, которая вызывает вашу ошибку, является ОЗУ. Обновите свой размер памяти.