¿Existe un lenguaje común para evitar la copia rebanada sentido para casos como éste:Evitar la copia rebanada innecesaria en Python
>>> a = bytearray(b'hello')
>>> b = bytearray(b'goodbye, cruel world.')
>>> a.extend(b[14:20])
>>> a
bytearray(b'hello world')
Me parece que hay una copia innecesaria ocurre cuando se crea la rebanada b[14:20]
. En lugar de crear un nuevo segmento en la memoria para dar a extend
, quiero decir "use solo este rango del objeto actual".
Algunos métodos le ayudará a cabo con los parámetros de división, por ejemplo 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
pero muchos, como extend
en mi primer ejemplo, no tienen esta característica.
Me doy cuenta de que para muchas aplicaciones de lo que estoy hablando sería una micro-optimización, entonces antes de que alguien pregunte, sí, he perfilado mi aplicación, y es algo que vale la pena preocuparse por mi caso.
Tengo una 'solución' a continuación, pero cualquier idea mejor es bienvenida.
El búfer es una buena opción para los objetos que admiten la interfaz del búfer. Por lo general, no vale la carcasa especial para casos pequeños (a menos que la mayoría de los casos de uso sean pequeños) porque un 50% más que una pequeña cantidad es todavía una pequeña cantidad –