0

大きなbytearrayを割り当てたいのですが、それをいくつかの小さなbytearrayのようなオブジェクトに分割したいと思います。小さいオブジェクトが変更されると、基礎となる bytearray を変更する必要があります。

次の両方の戦略を試しました。

from pprint import pprint as pp
b = bytearray(10)
c = b[5:]
c = bytearray(1 for d in c)
pp(c)
pp(b)

from pprint import pprint as pp
b = bytearray(10)
c = b[5:]
for i in range(len(c)):
  c[i] = 1
pp(c)
pp(b)

どちらも出力します

bytearray(b'\x01\x01\x01\x01\x01')
bytearray(b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00')

私の目的は、出力する同様のコードを作成することです

bytearray(b'\x01\x01\x01\x01\x01')
bytearray(b'\x00\x00\x00\x00\x00\x01\x01\x01\x01\x01')

つまり、cが更新されるbと、 も適切な位置で更新されます。

4

1 に答える 1

2

memoryviewはあなたが望むものに近いです

>>> b = bytearray(10)
>>> c = memoryview(b)[5:]
>>> c[:] = bytearray(1 for d in c)
>>> b
bytearray(b'\x00\x00\x00\x00\x00\x01\x01\x01\x01\x01')

その内容を確認するには、bytearray を使用するc.tobytes()か渡す必要がありますc

>>> c.tobytes()
'\x01\x01\x01\x01\x01'
>>> bytearray(c)
bytearray(b'\x01\x01\x01\x01\x01')
于 2012-09-20T07:39:14.217 に答える