Чем отличается тип bytes от bytearray? Всё просто, bytes неизменяемый тип, а bytearray изменяемый.
Что это нам даёт? Как известно, строка это неизменяемый тип. Всякий раз когда вы делаете любые манипуляции со строкой вы создаёте новую строку.
Если же её преобразовать в bytearray то все изменения будут происходить с оригинальным объектом без копирования.
Создаём массив
>>> arr = bytearray(struct.pack('=11s', b'Hello World'))
bytearray(b'Hello World')
Можем добавить элемент в массив
>>> arr.append(0)
bytearray(b'Hello World\x00')
Или удалить лишний элемент по индексу
>>> del arr[-1]
bytearray(b'Hello World')
Для добавления в строку используем extend
>>> arr.extend(b'!')
bytearray(b'Hello World!')
С помощью pack_into() вставляем данные в имеющийся массив заменяя данные
>> struct.pack_into("=6s", arr, 6, b'Python')
bytearray(b'Hello Python')
Достаём результат
>>> struct.unpack("=12s", arr)[0]
b'Hello Python'
И всё это мы сделали не создавая новых объектов! Это и экономит память, и выполняется быстрей, так как мы работаем с одним и тем же объектом.
#tricks#libs