Python PEP 3137 представил bytearray
в качестве изменяемого 8-разрядного типа массива. Тем не менее, list
неизменяемого типа bytes
выполняет тот же самый гол и фактически имеет betterperformance, хотя, возможно, и clunkier синтаксис. Этот новый тип противоречит Zen of Python«Bytearray» не противоречит дзену Питона?
Должен быть один - и желательно только один - простой способ сделать это.
Так что мой вопрос: есть ли какое-либо документально главное преимущество или дизайн рассмотрение для использования bytearray
больше list
из bytes
?
До сих пор я не нашел мотивации, задокументированной в PEP или на страницах документации. На самом деле, документация рассматривает их как почти равно:
Типа ByteArray является изменяемой последовательностью целых чисел в диапазоне от 0 < = х < 256. Она имеет большинство обычных методов изменяемых последовательностей ...
а потом,
Перечень и ByteArray объекты поддерживают дополнительные операции, которые позволяют на месте модификации объекта. Другие типы изменяемых последовательностей (при добавлении к языку) также должны поддерживать эти операции.
Как bytearray
с статически напечатал (как 8-битные целые числа без знака) можно было бы ожидать увеличение производительности, но, как упоминалось выше, обратное, вероятно, справедливо. Кроме того, не должно быть преимущества памяти для bytearray
по сравнению с list
от bytes
. Я мог представить себе, что существует необходимость в типе, изменяемом типами itertools.chain
, но это нигде не упоминается и, похоже, не является целью дизайна.
Bytearray может делать то, что список не может –
Если вас беспокоит производительность, вероятно, вы должны использовать NumPy. – kindall
Кроме того, я нахожу это сомнительным: «Кроме того, не должно быть преимущества памяти для байтарей над списком байтов». «Список» будет содержать ссылку (4 или 8 байт в зависимости от платформы) каждому значению 'bytes', которое хранится в другом месте. «Bytearray» будет использовать ровно 1 байт за значение. Это должно быть значительная экономия памяти. – kindall