我有两个网络缓冲区定义为:
buffer1 = bytearray(4096)
buffer2 = bytearray(4096)
在不分配额外内存的情况下,将内容从
buffer2
移到buffer1
的最快方法是什么?天真的方法是:
for i in xrange(4096):
buffer1[i] = buffer2[i]
显然,如果我执行
buffer1[:]=buffer2[:]
,python会移动内容,但是我不确定100%的原因,因为如果这样做:a = bytearray([0,0,0])
b = bytearray([1,1])
a[:]=b[:]
然后
len(a)=2
。丢失的字节会怎样?谁能解释这是如何工作的或如何在缓冲区之间移动数据?谢谢。
最佳答案
在我的计算机上,以下内容
buffer1[:] = buffer2
在400纳秒内复制4KB缓冲区。换句话说,您每秒可以完成250万个这样的副本。
这足够快以满足您的需求吗?
编辑:如果
buffer2
比buffer1
短,并且您想在buffer1
中的特定位置复制其内容而不更改目标缓冲区的其余部分,则可以使用以下命令:buffer1[pos:pos+len(buffer2)] = buffer2
同样,您可以在右侧使用切片来仅复制
buffer2
的一部分。