我有两个网络缓冲区定义为:
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
。丢失的字节会发生什么?任何人都可以解释这是如何工作的或如何在缓冲区之间移动数据?
感谢。
答案 0 :(得分:7)
在我的电脑上,以下
buffer1[:] = buffer2
在400纳秒内复制4KB缓冲区。换句话说,你每秒可以做250万个这样的副本。
这是否足以满足您的需求?
修改:如果buffer2
短于buffer1
,并且您希望将其内容复制到buffer1
中的特定位置而不更改其余的目标缓冲区,您可以使用以下内容:
buffer1[pos:pos+len(buffer2)] = buffer2
同样,您可以在右侧使用切片仅复制buffer2
的一部分。