我想分配一个大的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
也会在适当的位置更新。
答案 0 :(得分: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')
您必须使用c.tobytes()
或将c
传递给bytearray以查看其内容
>>> c.tobytes()
'\x01\x01\x01\x01\x01'
>>> bytearray(c)
bytearray(b'\x01\x01\x01\x01\x01')