bytes不可变,用于只读二进制数据,支持字面量b''且可哈希;bytearray可变,可通过构造函数创建,适合需修改的场景。
在Python中,bytes 和 bytearray 是两种用于处理二进制数据的内置类型。它们都存储字节(0 到 255 之间的整数),但在可变性上有关键区别。
bytes:不可变的字节序列
bytes 类型表示一个不可变的字节序列。一旦创建,就不能修改其中的内容。这类似于字符串(str)——你不能更改某个位置的字节。
常见创建方式:
- 使用字面量:
b'hello' - 通过 bytes() 构造函数:
bytes([104, 101, 108, 108, 111]) - 将字符串编码:
bytes('h或
ello', 'utf-8')'hello'.encode('utf-8')
操作示例:
x = b'hello' print(x[0]) # 输出: 104 (字符 'h' 的 ASCII 值) # x[0] = 72 # 错误!bytes 不支持 item 赋值
bytearray:可变的字节序列
bytearray 与 bytes 类似,但它是可变的。你可以修改、添加或删除其中的字节。这使得它在需要频繁修改二进制数据时非常有用。
创建方式与 bytes 类似,只是使用 bytearray():
bytearray(b'hello')bytearray([104, 101, 108, 108, 111])bytearray('hello', 'utf-8')
可变性示例:
y = bytearray(b'hello') y[0] = 72 # 修改第一个字节为 'H' (ASCII 72) print(y) # 输出: bytearray(b'Hello') y.append(33) # 添加感叹号 print(y) # 输出: bytearray(b'Hello!')
主要区别总结
- 可变性:bytes 不可变,bytearray 可变
- 性能:bytes 更轻量,适合只读场景;bytearray 支持原地修改
- 哈希性:bytes 可以用作字典键或集合元素(因为不可变),bytearray 不行
- 语法字面量:只有 bytes 有字面量写法(b''),bytearray 必须通过构造函数创建
基本上就这些。根据是否需要修改数据,选择 bytes 或 bytearray 即可。

ello', 'utf-8')






