是否可以在bytearray上获取代理?

时间:2012-09-20 07:31:51

标签: python bytearray

我想分配一个大的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也会在适当的位置更新。

1 个答案:

答案 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')