bytearray和list之间的区别

raf*_*elc 5 python python-2.7

有什么区别bytearray和例如a listtuple

顾名思义,bytearray必须是array携带byte物品.
在python中,似乎bytes并且str被平等对待

>>> bytes
<type 'str'>
Run Code Online (Sandbox Code Playgroud)

那么区别是什么呢?
另外,如果你打印一个bytearray,结果很奇怪

>>> v = bytearray([200, 201])
>>> print v
ÈÉ
Run Code Online (Sandbox Code Playgroud)

它似乎转换整数chr(integer),是吗?bytearray当时有什么用?

pok*_*oke 11

你在某种程度上是正确的:在Python 2中,bytes它是str类型的同义词.这是因为最初没有bytes对象,只有strunicode(后者用于unicode字符串,即具有多字节功能).当Python 3出现时,他们改变了整个字符串,并使unicode成为默认的Python 3 str类型,并将它们添加bytes为原始字节序列的类型(使其等同于Python 2的str对象).

因此,尽管在Python 3你之间的不同strbytes,相应的类型在Python 2 unicodestr.

现在让这个bytearray类型变得有趣的是它是可变的.上面的所有字符串和字节序列都是不可变的,因此每次更改时,您都要创建一个新对象.但是您可以修改bytearray对象,使它们对于需要修改序列中的单个字节的各种目的而言很有趣.

  • 另一件让 `bytearray` 有趣的事情(与 Python 的 `str` 相比,与 Python 3 的 `bytes` 相比没有那么多)是它是一个数组有点含糊不清。在 Python 2 中,有时字节是字符,有时是小数字。如果 `= bytearray([97,98,99])`,`repr(b)` 给你 `bytearray(b'abc')`。但是`b[0]` 给你`97`。如果你习惯了 `str` 对你隐藏它并强迫你调用 `ord` 和 `chr`(`'abc'[0]` 是 `'a'`,而不是 97),这可能会令人困惑。 (2认同)