Python Memoryview против Bytearray?

#python #arrays #memoryview

#python #массивы #просмотр памяти

Вопрос:

Когда я должен использовать memoryview в Python2.7? Я просто не могу найти никакой выгоды от его использования поверх обычного bytearray. Также memoryview не поддерживает строковые методы, что делает его абсолютно непригодным для использования. Я ошибаюсь?

Ответ №1:

Хорошо, наконец, работая над сетевым программным обеспечением, я нашел вариант использования memoryviews: когда у нас есть буфер сокета фиксированного размера, и мы хотим выполнить быструю нарезку на нем (чтение / запись данных из любой заданной позиции без создания дополнительных копий в памяти), что-то вроде этого:

 buf = bytearray(4096)
mview = memoryview(buf)
socket.recv_into(mview)
print mview[256:]
 

Итак, в некоторых случаях удобно иметь memoryview в bytearray.
Единственное, что вы должны иметь в виду при такой схеме: после того, как вы создали memoryview в bytearray, вы не можете изменить размер bytearray, пока вы не удалите этот memoryview, bytearray будет ограничен его начальным размером и выдавать BufferError: Existing exports of data: object cannot be re-sized ошибку при каждой попытке добавить туда больше данных.