So kopieren Sie ein python-bytearray Puffer?
Habe ich zwei Netzwerk-Puffer definiert als:
buffer1 = bytearray(4096)
buffer2 = bytearray(4096)
Welche ist die Schnellste Möglichkeit zum verschieben der Inhalte von buffer2
zu buffer1
ohne die Zuweisung zusätzlicher Speicher?
Den naiven Weise wäre zu tun:
for i in xrange(4096):
buffer1[i] = buffer2[i]
Anscheinend, wenn ich buffer1[:]=buffer2[:]
python bewegt die Inhalte, aber ich bin mir nicht 100% sicher, weil wenn ich tun:
a = bytearray([0,0,0])
b = bytearray([1,1])
a[:]=b[:]
dann len(a)=2
. Was passiert mit den fehlenden byte? Kann mir jemand erklären, wie das funktioniert oder wie verschieben von Daten zwischen Puffer?
Dank.
Ich denke, was du tust, in deinem ersten code ist "verschieben Sie den Inhalt von buffer2, ist buffer1", nicht das Gegenteil.
danke @jadkik94, behoben.
danke @jadkik94, behoben.
InformationsquelleAutor josgek | 2012-05-17
Du musst angemeldet sein, um einen Kommentar abzugeben.
Auf meinem computer die folgenden
Kopien ein 4-Kb-Puffer unter 400 Nanosekunden. In anderen Worten, Sie können tun, 2.5 Millionen Kopien pro Sekunde.
Ist das schnell genug für Ihre Bedürfnisse?
edit: Wenn
buffer2
ist kürzer alsbuffer1
, und Sie möchten, kopieren Sie seinen Inhalt in einer bestimmten position inbuffer1
ohne änderung der übrigen Ziel-Puffer, können Sie die folgenden verwenden:Ähnlich, die Sie verwenden können, schneiden Sie auf der rechten Seite zu kopieren, ein Teil der
buffer2
.Gut, du machst eine Kopie von einem Puffer, enthält zwei bytes. Das Ergebnis daher auch enthält zwei bytes.
Das ist mein problem. Ich will nicht, um eine Kopie buffer2 aber seinen Inhalt zu verschieben, ist buffer1.
Siehe den edit.
Ah anscheinend tun Sie das mit
memoryview
: eli.thegreenplace.net/2011/11/28/...InformationsquelleAutor NPE