Python中str、bytes与bytearray类型详解及转换方法

小林子
小林子
发布时间:2026-10-13 | 2人浏览过
原创

本文详细解析Python3中str、bytes和bytearray三种数据类型的区别与联系。重点讲解str与bytes之间的encode/decode及构造函数转换方式,深入剖析bytearray作为可变字节序列的初始化参数规则及常用操作方法,并对比bytes不可变与bytearray可变的特性,提供完整的类型间转换示例。

在Python3中,文本数据与二进制数据被明确区分开来。文本采用Unicode编码,对应str类型,主要用于展示;二进制数据则对应bytes类型,适用于存储和传输场景。其中,bytes本质上是字节的序列,而str则是Unicode字符的序列。

str类型示例如下:

 >>> s = u'你好'
 >>> s
 '你好'
 >>> type(s)
 <class 'str'>

bytes类型示例如下:

 >>> b = b'abc'
 >>> b
 b'abc'
 >>> type(b)
 <class 'bytes'>

str与bytes之间的转换逻辑为:str通过encode()方法转换为bytes,bytes再通过decode()方法还原为str。

第一种转换方式是利用encode()和decode()方法。

 >>> a = u'你好'
 >>> b = a.encode('utf-8')
 >>> b
 b'\xe4\xbd\xa0\xe5\xa5\xbd'
 >>> type(b)
 <class 'bytes'>
 >>> new_a = b.decode('utf-8')
 >>> new_a
 '你好'
 >>> type(new_a)
 <class 'str'>

第二种转换方式是利用bytes()构造函数和str()构造函数。

 >>> a = u'你好'
 >>> b= bytes(a, encoding='utf-8')
 >>> b 
 b'\xe4\xbd\xa0\xe5\xa5\xbd'
 >>> type(b)
 <class 'bytes'>
 >>> new_a = str(b, encoding='utf-8')
 >>> new_a
 '你好'
 >>> type(new_a)
 <class 'str'>

接下来介绍bytearray类型。

bytearray类表示一个值在0 <= x < 256范围内的可变字节序列。

初始化bytearray时,源参数可以有多种传入方式:

若源参数为字符串,则必须指定编码(以及可选的错误处理)参数;bytearray()内部会调用str.encode()将字符串转换为字节。 若源参数为整数,则创建的数组大小等于该整数,并用空字节(null bytes)进行初始化。 若源参数为符合缓冲区接口的对象,则使用该对象的只读缓冲区来初始化字节数组。 若源参数为可迭代对象,则其元素必须是值在0 <= x < 256范围内的整数,这些整数将作为数组的初始内容。 若不传入任何参数,则创建一个长度为0的空数组。

当源参数是字符串时,示例如下:

 >>> b = bytearray(u'你好', encoding='utf-8')
 >>> b
 bytearray(b'\xe4\xbd\xa0\xe5\xa5\xbd')
 >>> type(b)
 <class 'bytearray'>

当源参数是整数时,示例如下:

 >>> b = bytearray(5)
 >>> b
 bytearray(b'\x00\x00\x00\x00\x00')
 >>> type(b)
 <class 'bytearray'>

当源参数是可迭代对象时,该迭代对象中的元素必须满足0 <= x < 256的条件:

 >>> b = bytearray([1, 2, 3, 4, 255])
 >>> b
 bytearray(b'\x01\x02\x03\x04\xff')
 >>> type(b)
 <class 'bytearray'

bytes与bytearray的主要区别在于:

bytes类型是不可变的,这与str类似;而bytearray类型是可变的,这与list类似。

 >>> b = bytearray()
 >>> b
 bytearray(b'')
 >>> b.append(10)
 >>> b
 bytearray(b'\n')
 >>> b.append(100)
 >>> b
 bytearray(b'\nd')
 >>> b.remove(100)
 >>> b
 bytearray(b'\n')
 >>> b.insert(0, 150)
 >>> b
 bytearray(b'\x96\n')
 >>> b.extend([1, 3, 5])
 >>> b
 bytearray(b'\x96\n\x01\x03\x05')
 >>> b.pop(2)
 1
 >>> b
 bytearray(b'\x96\n\x03\x05')
 >>> b.reverse()
 >>> b
 bytearray(b'\x05\x03\n\x96')
 >>> b.clear()
 >>> b
 bytearray(b'')

bytes与bytearray之间的相互转换方法如下:

 >>> b = b'abcdef'
 >>> bay = bytearray(b)
 >>> bay
 bytearray(b'abcdef')
 >>> b = bytes(bay)
 >>> b
 b'abcdef'

bytearray与str之间的相互转换方法如下:

 >>> a = 'abcdef'
 >>> b = bytearray(a, encoding='utf-8')
 >>> b
 bytearray(b'abcdef')
 >>> a = b.decode(encoding='utf-8')
 >>> a
 'abcdef'

总结

以上内容介绍了Python中str、bytes和bytearray三种类型的详细解析及转换方法,希望能对大家有所帮助。如有任何疑问,欢迎留言,小编会及时回复!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表