Python: Range () максимальный размер; динамический или статический? - PullRequest
4 голосов
/ 14 июля 2010

Я довольно новичок в python, поэтому я делаю все возможное, чтобы пройти через Project Euler, чтобы решить логические изгибы в моей голове.

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

Есть идеи?

Ответы [ 2 ]

6 голосов
/ 14 июля 2010

Посмотрите на get_len_of_range и get_len_of_range_longs в источник встроенного модуля

Сводка: вы получите OverflowError, если список содержит больше элементов, чем может поместиться в подписанный длинный.На 32-битном Python это 2**31 - 1, а на 64-битном Python это 2**63 - 1.Конечно, вы получите MemoryError даже для значений чуть ниже этого.

0 голосов
/ 14 июля 2010

Размер ваших списков ограничен только вашей памятью. Обратите внимание, что в зависимости от вашей версии Python для range(1, 9999999999999999) требуется всего несколько байтов оперативной памяти, поскольку он всегда создает только один элемент виртуального списка, который он возвращает.

Если вы хотите создать экземпляр списка, используйте list(range(1,n)) (это скопирует виртуальный список).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...