I have two network buffers defined as:
buffer1 = bytearray(4096)
buffer2 = bytearray(4096)Which is the fastest way to move the content from buffer2 to buffer1 without allocating extra memory?
The naive way would be to do:
for i in xrange(4096): buffer1[i] = buffer2[i]Apparently if I do buffer1[:]=buffer2[:] python moves the content, but I'm not 100% sure of it because if I do:
a = bytearray([0,0,0])
b = bytearray([1,1])
a[:]=b[:]then len(a)=2. What happens with the missing byte? Can anyone explain how this works or how to move data between buffers?
Thanks.
21 Answer
On my computer, the following
buffer1[:] = buffer2copies a 4KB buffer in under 400 nanoseconds. In other words, you can do 2.5 million such copies per second.
Is this fast enough for your needs?
edit: If buffer2 is shorter than buffer1, and you want to copy its contents at a particular position in buffer1 without changing the rest of the target buffer, you can use the following:
buffer1[pos:pos+len(buffer2)] = buffer2Similarly, you can use slicing on the right-hand side to only copy a portion of buffer2.