Python PEP 3137介绍bytearray
作为一个可变的8位数组类型。然而,不可变的bytes
类型的list
实现相同的目标,并且实际上具有betterperformance,虽然也许是更笨拙的语法。这种新类型与Zen of Python`bytearray`是否与Python的Zen不矛盾?
应该有一个 - 最好只有一个 - 明显的方法来做到这一点。
所以我的问题是:是否有任何记录主要优势和设计考虑使用bytes
一个bytearray
在list
?
到目前为止,我还没有发现在PEP或文档页面中记录的一个动机。事实上,该文档将它们视为接近等于:
的ByteArray类型是整数的范围为0 < = X < 256.一个可变的序列,具有大部分可变序列的常规方法...
然后,
列表和ByteArray对象支持额外的操作,使对象的就地修改。其他可变序列类型(添加到语言中时)也应该支持这些操作。
由于bytearray
s的静态类型(如8位无符号整数),人们可能预期的性能提升,但逆上面提到的可能是真实的。此外,bytearray
与bytes
的list
应该没有记忆优势。我可以想象,需要一个itertools.chain
风格的可变类型,但这在任何地方都没有提及,似乎并不是设计目标。
一个bytearray可以做一个列表不能做的事 –
如果你关心性能,你应该使用NumPy。 – kindall
另外,我觉得这个可疑:“另外,字节列表上的字节阵列应该没有内存优势。”一个'list'将包含一个引用(4或8个字节,取决于平台)到每个'bytes'值,该值存储在别处。一个'bytearray'将会每个值恰好使用1个字节。这应该是一个重大的内存节省。 – kindall