【发布时间】:2016-05-16 22:02:02
【问题描述】:
Python PEP 3137 引入了 bytearray 作为一个可变的 8 位数组类型。然而,不可变的bytes 类型的list 实现了相同的目标,并且实际上具有better performance,尽管语法可能更笨拙。这种新类型与Zen of Python 相矛盾
应该有一种——最好只有一种——明显的方法。
所以我的问题是:与bytes 的list 相比,使用bytearray 是否有任何记录的主要优势或设计考虑因素?
到目前为止,我还没有发现 PEP 或文档页面中记录的动机。事实上,文档将它们视为几乎相等:
bytearray 类型是 0
然后,
List 和 bytearray 对象支持允许就地修改对象的附加操作。其他可变序列类型(当添加到语言中时)也应该支持这些操作。
由于bytearrays 是静态类型的(作为 8 位无符号整数),人们可能会期望性能会有所提高,但如上所述,反之亦然。此外,bytearray 与 bytes 的 list 相比,应该没有内存优势。我可以想象需要 itertools.chain 风格的可变类型,但这在任何地方都没有提到,似乎也不是设计目标。
【问题讨论】:
-
字节数组可以做列表不能做的事情
-
如果您关心性能,您可能应该使用 NumPy。
-
另外,我觉得这很可疑:“另外,对于字节列表,字节数组应该没有内存优势。”
list将包含对每个bytes值的引用(4 或 8 个字节,具体取决于平台),该值存储在其他位置。bytearray每个值将使用 1 个字节。这应该可以节省大量内存。 -
你见过the interface supported by
bytearray吗?它与通用的list完全不同。您可能会问,如果我们可以将字节放入tuple,为什么会存在bytes。bytearray是可变的字节序列。bytes是一个不可变的字节序列。 -
@kindall -
bytearray可能应该被实现为非连续内存;否则每次调用extend()时都会遭受重新分配,然后我们不妨将bytes连接在一起。
标签: python python-3.x bytearray