Имеет ли преобразование из изменчивого типа bytearray
в не изменяемый тип bytes
? Есть ли связанные с этим затраты или интерпретатор просто рассматривает его как неизменяемую последовательность байтов, например, отличая char*
до const char* const
в C++?Преобразуется ли преобразование из bytearray в байты в копию?
ba = bytearray()
ba.extend("some big long string".encode('utf-8'))
# Is this conversion free or expensive?
write_bytes(bytes(ba))
отличаются ли это между Python 3, где bytes
является его собственный тип и Python 2.7, где bytes
просто псевдоним для str
?
Все операции включают * некоторые * расходы. Вы можете посмотреть источник, или вы можете использовать временные тесты, чтобы узнать, будет ли время линейно увеличиваться с размером проблемы (как это было бы, если бы была сделана копия). –
Я уверен, что преобразование 'bytearray' в' bytes' берет копию. Это связано с тем, что если новые «байты» указывают на тот же базовый массив, что и «bytearray», тогда он не будет действительно неизменным. – Nayuki
Обратите внимание, что если вы хотите просмотреть содержимое 'bytearray' без создания копии, вы можете использовать' memoryview' для этой цели. Предостережение заключается в том, что изменения в данных 'bytearray' изменят данные в' memoryview' и что 'bytearray' не может быть изменен (без' append', 'pop' s, изменение размеров срезов и т. Д.) Для пока существуют все экспортированные буферы (из которых 'memoryview' является наиболее распространенным типом, созданным в коде уровня Python). – ShadowRanger