对不起,如果我的英语不好,我说韩语作为母语。
我写的代码部分改变了字节数组。我想做的是给字节数组的某些部分的内存视图起给予名字,然后用这个内存视图更新字节数组。大致如下:
some_section_name_1 = memoryview(binary_data[section1_start:section1_end])
some_section_name_2 = memoryview(binary_data[section2_start:section2_end])
#update
some_section_name_1[:] = byte_like_object
some_section_name_2[:] = byte_like_object
但失败了所以我写了下面的代码来检查:
section1_start, section1_end = 3, 7
binary_data = bytearray(range(8))
some_section_name_1 = memoryview(binary_data[section1_start:section1_end])
some_section_name_1[:] = bytes(range(4))
print(binary_data)
binary_data = bytearray(range(8))
whole_mv = memoryview(binary_data)
whole_mv[section1_start:section1_end] = bytes(range(4))
print(binary_data)
binary_data = bytearray(range(8))
binary_data[section1_start:section1_end] = bytes(range(4))
print(binary_data)
然后我终于想起了切片会做浅拷贝,所以切片赋值只会应用于被拷贝的对象,而不是原始对象。
那么,有什么办法可以达到我原本的目的呢?命名bytearray的某些特定部分,并使用该名称更新bytearray。必须是整个字节数组吗|整个记忆视图?
1条答案
按热度按时间klr1opcd1#
如果我没理解错的话,你想要的是:
你是对的,一旦你切片字节数组,它就创建了一个新的字节数组。你需要对内存视图进行切片。
举个例子: