将可变类型 bytearray
转换为不可变类型 bytes
是否会产生复制?是否与此相关的成本,还是解释器只是将其视为不可变字节序列,就像在 C++ 中将 char*
强制转换为 const char* const
一样?
ba = bytearray()
ba.extend("some big long string".encode('utf-8'))
# Is this conversion free or expensive?
write_bytes(bytes(ba))
在Python 3中,bytes
是其自己的类型,在Python 2.7中,bytes
只是str
的别名,这两者有区别吗?
bytearray
转换为bytes
会产生一份拷贝。这是因为如果新的bytes
指向与bytearray
相同的后备数组,那么它就不是真正不变的。 - Nayukibytearray
的内容,你可以使用memoryview
来实现。但需要注意的是,对于bytearray
数据的修改将会改变memoryview
中的数据,并且只要存在导出的缓冲区(其中memoryview
是Python代码中创建的最常见类型),bytearray
就无法调整大小(无法使用append
、pop
、重新分配切片等)。 - ShadowRangerbuffer()
将bytearray
转换为只读缓冲区,而无需执行复制操作。 - pallgeuer