【问题标题】:How to write string to memoryview?如何将字符串写入内存视图?
【发布时间】:2021-01-22 23:12:50
【问题描述】:

我想将bytearray 类型写入memoryview 类型。我尝试了什么:

my_memory_view = memoryview(b'hello')
new_byte_string = bytearray(b'world')
my_memory_view = new_byte_string

但它返回了:

AttributeError: can't set attribute

我知道可以通过以下方式写入memoryview:

my_memory_view[0] = 12  #Changes first byte

有没有办法将bytearray 的值自动插入memoryview

编辑:

我犯了一个错误:错误不是AttributeError 出现问题是因为类型改变了,而是在我的包中我使用(@987654321@) 将显示AttributeError

【问题讨论】:

  • 您不能通过不可变对象写入内存视图。
  • 您的代码在我运行时运行良好。没有错误,然后print(my_memory_view) 显示:bytearray(b'world')。请提供minimal reproducible example
  • 另外,虽然您的代码错误且不起作用,但它不会产生您声称的错误消息。 (相反,它默默地做一些与你想要的不同的事情——它只是重新分配一个变量而不是写入内存视图。)
  • my_memory_view = new_byte_string 之后,type(my_memory_view)<class 'bytearray'>——它不再是memoryview

标签: python arrays python-3.x memoryview


【解决方案1】:

你不能写入你的内存视图,因为你的内存视图是一个字节对象的视图,它是不可变的。

如果你有一个可写的内存视图,比如memoryview(bytearray(b'hello')),你可以这样做

your_memoryview[:] = whatever

whatever的内容写入底层内存。

【讨论】:

  • 根据documentation,“bytearray 对象是bytes 对象的可变对应物”(强调我的)。
  • @martineau:是的,但memoryview(b'hello') 不是字节数组的内存视图。如果它,那么你可以写入它。
  • 问题中的代码试图通过字节对象将字节数组写入内存视图,而不是通过字节数组将字节对象写入内存视图。
  • 好的,感谢大家在这个问题上的帮助。这对我很有帮助。
猜你喜欢
  • 2013-10-30
  • 2015-07-10
  • 1970-01-01
  • 1970-01-01
  • 2011-01-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多