对于这样的情况,是否有避免无意义的切片复制的常见习语:
>>> 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
我的第一个例子,没有这个功能。
我意识到对于许多应用程序来说,我所说的将是一个微优化,所以在任何人问之前 - 是的,我已经分析了我的应用程序,这对于我的情况值得担心。
我在下面有一个“解决方案”,但欢迎任何更好的想法。