Указатель на подстроку Python: memoryview vs itertools.islice vs…? - PullRequest
0 голосов
/ 28 мая 2018

Было бы лучше использовать memoryview, itertools.islice или что-то еще (например, var = (start, stop)) в качестве указателя в Python на подстроку очень большой строки?

Контекст: у меня есть некоторыеочень длинные строки, которыми мне нужно манипулировать (вырезать и вставлять подстроки и т. д.), не создавая новую строку каждый раз.

Я выполняю это, создавая двоичное дерево поиска, в котором каждый узел представляет подстроку, а затем используяОперации разделения / слияния (структура данных Rope).

Каждому узлу нужна ссылка, прикрепленная к нему на подстроку исходной очень большой строки, которую представляет узел.(Это необходимо, чтобы при обходе дерева для получения окончательно отредактированной строки я возвращал части исходной строки в исправленной последовательности.)

Я мог бы прикрепить кортеж, представляющий начало /остановите значения для каждого узла и затем используйте нарезку string[start:stop], но в C вы бы использовали указатель и количество символов.

Было бы лучше сделать что-то подобное в Python, либо с memoryview, либо сislice или с чем-то еще?

1 Ответ

0 голосов
/ 28 мая 2018

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

Из перечисленных вами вариантов только просмотр памяти не будетсоздать дополнительную копию в памяти.См. этот вопрос для получения дополнительной информации, а также ответ, который включает пример того, где просмотр памяти может быть полезен.Хотя это может ускорить некоторые операции, как в случае с примером, могут быть более эффективные способы решения проблемы или структурирования вашего кода, которые устраняют необходимость для начала.Ваш сценарий использования и пробег могут меняться, конечно.

Я также нашел несколько ссылок, говорящих о файлах с отображением в памяти (mmap) и представлении памяти (буфер в py2),Если вам действительно понадобятся указатели нулевого копирования, я определенно рекомендую проверить интерфейс памяти.

...