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

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

本文详细解析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 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。