【问题标题】:Difference between bytearray and list字节数组和列表的区别
【发布时间】:2015-05-09 22:01:50
【问题描述】:

bytearraylisttuple 之间有什么区别?

顾名思义,bytearray 必须是带有byte 对象的array
在python中,似乎bytesstr被平等对待

>>> bytes
<type 'str'>

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

>>> v = bytearray([200, 201])
>>> print v
ÈÉ

它似乎转换了 chr(integer) 中的整数,对吗?那么bytearray 有什么用呢?

【问题讨论】:

标签: python python-2.7


【解决方案1】:

您在某些方面是正确的:在 Python 2 中,bytesstr 类型的同义词。这是因为最初没有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 中,有时字节是字符,有时它们是小数字。 if ` = bytearray([97,98,99]), repr(b)` 给你bytearray(b'abc')。但是b[0] 给你97。如果您习惯于 str 向您隐藏它并强迫您调用 ordchr'abc'[0]'a',而不是 97),这可能会令人困惑。
猜你喜欢
  • 2010-09-06
  • 1970-01-01
  • 2021-02-14
  • 2011-03-30
  • 1970-01-01
  • 2011-02-12
  • 1970-01-01
相关资源
最近更新 更多