Существует ли распространенная идиома, позволяющая избежать бессмысленного копирования фрагментов в таких случаях:
>>> a = bytearray(b'hello')
>>> b = bytearray(b'goodbye, cruel world.')
>>> a.extend(b[14:20])
>>> a
bytearray(b'hello world')
Мне кажется, что при создании среза b[14:20]
происходит ненужная копия. Вместо того, чтобы создавать новый фрагмент в памяти, чтобы дать extend
, я хочу сказать «использовать только этот диапазон текущего объекта».
Некоторые методы помогут вам с параметрами среза, например count
:
>>> a = bytearray(1000000) # a million zero bytes
>>> a[0:900000].count(b'\x00') # expensive temporary slice
900000
>>> a.count(b'\x00', 0, 900000) # helpful start and end parameters
900000
но многие, как extend
в моем первом примере, не имеют этой функции.
Я понимаю, что для многих приложений речь идет о микрооптимизации, поэтому, прежде чем кто-либо спросит, да, я профилировал свое приложение, и для моего случая это стоит беспокоиться.
У меня есть одно «решение» ниже, но любые лучшие идеи приветствуются.