2013-08-09 2 views
1

У меня есть функция, которая добавляет подстроки строки в список. Когда входная строка большая аРасширение размера списка в python

MemoryError exception

отбрасываются. Есть ли ограничение длины для 1-мерного списка? Если да, то как я могу его расширить?

+0

Предел - 'sys.maxsize', но вы его не ударили. Вы нажимаете ограничение на производительность для вашего компьютера. –

+1

Если вы обнаружили, что у вас закончилась нехватка памяти, потому что список слишком велик, попробуйте вместо этого использовать генератор. – rlms

+0

Ваша строка должна быть огромной. Как упоминалось в генераторах, но как вы создаете строку, заполняющую память ваших машин? –

ответ

2

Помимо создания дополнительной памяти у вас есть еще несколько вариантов.

  1. Попробуйте изменить алгоритм так, чтобы он был менее интенсивным в памяти. Например, если вам не нужны все эти подстроки сразу, вы можете создавать и использовать их последовательно с использованием функции генератора или выражения генератора.
  2. Если вам это необходимо, попробуйте просто удерживать «большую строку» в памяти и работать с buffer().
  3. Если большая строка поступает из файла, вы можете указать mmap() этот файл (или его часть) в адресное пространство.
3

Да. Доступная память. Сделайте больше памяти доступной для процесса, либо добавив больше swap, добавив больше оперативной памяти, либо перейдя в архитектуру с большим объемом памяти.

0

Вы можете записать данные в файл, а не добавлять его в список.

0

Вы случайно используете 32-битную сборку python? При использовании 64-разрядного адресного пространства ваш процесс должен доходить до , измельчая, задолго до того, как он исчерпает всю память, на которую он теоретически может получить доступ, предполагая, что у вас имеется достаточное пространство подкачки. В 32-битном режиме вы можете получить доступ только к 3 гигабайтам памяти; не так уж и по сегодняшним меркам.

Смежные вопросы