Напишите код, используя наиболее естественные (строки), выясните, не слишком ли это медленно, а затем улучшите его.
Массивы можно использовать как замену для str
в большинстве случаев, если вы ограничиваете доступ к индексам и срезам. Оба имеют фиксированную длину. Оба должны иметь примерно одинаковые требования к памяти. Массивы являются изменяемыми, если вам нужно изменить буферы. Массивы могут читать непосредственно из файлов, так что при чтении не снижается скорость.
Я не понимаю, как избежать проблем с Unicode, используя массивы. str
является просто массивом байтов и ничего не знает о кодировке строки.
Я предполагаю, что упомянутые вами "дисковые буферы" могут быть довольно большими, поэтому вы можете подумать об использовании mmap
:
Отображаемые в память файловые объекты ведут себя как строки и как файловые объекты. Однако, в отличие от обычных строковых объектов, они изменчивы. Вы можете использовать объекты mmap в большинстве мест, где ожидаются строки; например, вы можете использовать модуль re для поиска файла с отображением в памяти. Поскольку они изменчивы, вы можете изменить один символ, выполнив obj [index] = 'a', или изменить подстроку, присвоив фрагменту: obj [i1: i2] = '...'. Вы также можете читать и записывать данные, начиная с текущей позиции файла, и искать () по файлу в разных позициях.