容器序列
list、tuple 和 collections.deque 这些序列能存放不同类型的数据。
扁平序列
str、bytes、bytearray、memoryview 和 array.array,这类序列只能容纳一种类型。
容器序列存放的是它们所包含的任意类型的对象的引用,而扁平序列里存放的是值而不是引用。换句话说,扁平序列其实是一段连续的内存空间。由此可见扁平序列其实更加紧凑,但是它里面只能存放诸如字符、字节和数值这种基础类型。
元组(tuple)
元组其实是对数据的记录:元组中的每个元素都存放了记录中一个字段的数据,外加这个字段的位置。正是这个位置信息给数据赋予了意义。如果只把元组理解为不可变的列表,那其他信息——它所含有的元素的总数和它们的位置——似乎就变得可有可无。但是如果把元组当作一些字段的集合,那么数量和位置信息就变得非常重要了。
"元组"(Tuple)是计算机编程中的一个数据结构,它是一个有序的、不可变的序列。元组中的元素可以包含不同的数据类型,并使用逗号分隔。元组的特点是一旦创建后,其内容不可更改。在许多编程语言中,元组用于存储相关的数据项,并通常用括号括起来。
例如,Python中的元组表示方式为:
my_tuple = (1, "Hello", 3.14)
这个元组包含了一个整数、一个字符串和一个浮点数。
"列表"(List)是计算机编程中常见的数据结构,用于存储一组有序的元素。列表是可变的,这意味着可以通过添加、删除或更改元素来修改列表。在许多编程语言中,列表用于存储一系列相关的数据。
例如,Python中的列表表示方式为:
my_list = [1, 2, 3, "Hello", 5.0]
这个列表包含了整数、字符串和浮点数。与元组不同,列表可以随时修改,可以使用索引和切片操作来访问或修改列表中的元素。例如,可以通过 my_list[0] 访问列表的第一个元素。
str
是 Python 中表示字符串的数据类型。字符串是一系列字符的序列,可以包含字母、数字、符号等。在 Python 中,字符串可以用单引号 ('
) 或双引号 ("
) 括起来。
my_string = 'Hello, World!'
bytes
是 Python 中表示字节序列的数据类型。字节是计算机存储数据的基本单位,而字节序列是一系列字节的有序集合。在 Python 中,bytes
对象用于表示不可变的字节序列,而 bytearray
对象则表示可变的字节序列。
bytes 对象可以通过字面量表示,例如:
my_bytes = b'Hello, World!'
在字节字面量前加上 b,表示创建一个字节序列而不是字符串。可以通过索引访问 bytes 对象中的单个字节:
first_byte = my_bytes[0]
与字符串类似,bytes 也是不可变的,不能直接修改其中的内容。但是,可以使用一些方法创建新的 bytes 对象或进行字节操作。
例如,可以使用 bytes() 构造函数将字符串转换为字节序列:
string_value = "Hello, World!"
bytes_value = bytes(string_value, 'utf-8')
其中 'utf-8' 是字符编码,用于指定将字符串转换为字节序列时使用的编码方式。
bytes 对象在处理二进制数据时非常有用,例如读取文件、网络通信等场景。
bytearray
是 Python 中表示可变字节序列的数据类型。与 bytes
类型不同,bytearray
允许在创建后修改其内容。它是对字节的动态可变视图。
以下是 bytearray
的一个示例:
my_bytearray = bytearray(b'Hello, World!')
与 bytes
类型一样,可以通过索引访问 bytearray
对象中的单个字节:
first_byte = my_bytearray[0]
不同之处在于,bytearray
对象是可变的。可以通过索引和切片来修改其内容:
my_bytearray[0] = 65 # 修改第一个字节为 ASCII 'A' my_bytearray[7:12] = b'Universe' # 替换部分字节序列
bytearray
对象还提供了一些方法,例如 append()
用于在末尾添加字节,extend()
用于扩展字节序列,remove()
用于删除指定值的字节等。
my_bytearray.append(33) # 在末尾添加 ASCII '!' my_bytearray.extend(b' Python') # 在末尾添加字节序列 my_bytearray.remove(32) # 删除值为 ASCII 32(空格)的字节
bytearray
类型通常在需要对二进制数据进行动态修改时使用,例如在网络编程、文件处理等场景中。