Python 中的列表和元组的区别

2025年9月3日 | 7分钟阅读

列表和元组有许多共同的特点和优势,它们之间存在显著的区别和独特的特征,会影响它们的用法,例如可变性、性能和内存使用。 列表是可变的,这使得我们能够添加、删除或修改元素。

元组是不可变的,不允许修改或更改。在它们之间选择合适的数据类型取决于我们的需求,是希望修改数据还是优先考虑性能和内存效率。

什么是列表?

在 Python 中,列表是元素的有序、可变集合。它允许我们执行各种修改,如添加、删除或更改元素。

列表的特点

以下是 Python 列表的一些重要特点:

Difference between List and Tuple in Python
  • 有序:列表中元素的顺序保持不变,索引从 0 开始。
  • 可变:在可变数据类型中,我们可以编辑或更改元素。
  • 动态:列表的大小可以动态地增长或收缩。
  • 支持多种数据类型:列表可以包含各种不同数据类型的元素。
  • 列表使用方括号([])进行声明。

让我们看一个在 Python 中创建列表的例子。

示例

立即执行

输出

Initialized list: [19, 23, 10, 'tpointtech', 7.8]
Data Type: <class 'list'>

说明

在上面的例子中,我们使用方括号 [] 创建了一个列表并打印了它。我们可以看到,初始化的列表包含整数、字符串和浮点数等不同的 数据类型

什么是元组?

元组是元素的有序、不可变集合,这意味着一旦创建,其元素就不能更改。

元组的特点

以下是 Python 元组包含的一些特点:

Difference between List and Tuple in Python
  • 有序:与列表一样,在元组中,元素具有特定的顺序,可以通过索引访问。
  • 不可变:在不可变数据类型中,我们不能编辑或更改元素。
  • 比列表快:由于元组是不可变的,Python 会优化它们的存储和处理。
  • 支持多种数据类型:元组可以包含不同类型的元素。
  • 元组使用圆括号(())进行声明。

让我们看一个在 Python 中创建元组的例子。

示例

立即执行

输出

Initialized Tuple: (19, 23, 10, 'tpointtech', 7.8)
Data Type: <class 'tuple'>

说明

在上面的例子中,我们使用圆括号 () 创建了一个列表并打印了它。我们可以看到,初始化的元组包含整数、字符串和浮点数等不同的数据类型。我们打印了数据,即元组。

列表和元组之间的主要区别

以下是 Python 中列表和元组之间的主要区别:

特性列表元组
可变性我们可以通过添加或删除项来修改列表(可变)。我们不能通过添加或删除项来修改元组(不可变)。
性能由于可变性,列表速度较慢。由于其静态大小和不可变性,元组速度较快。
内存使用列表使用更多内存。元组使用更少内存。
方法Python 列表提供了更多内置方法。(例如 append、extend、remove)Python 元组提供了更少的内置方法。(例如 index、count)
语法我们可以使用方括号 [] 定义列表。我们可以使用圆括号 () 定义元组。
迭代速度由于列表的动态特性,迭代速度稍慢。元组的迭代速度更快,因为它们是不可变的。
存储效率列表需要额外的内存用于动态分配。元组更节省内存
错误安全性列表容易发生意外更改。元组提供数据完整性以防止错误。
用例当数据需要更改时,使用列表。当数据应保持不变时,使用元组。
示例sample_list = [12, 1, 5, 8, 4]sample_tuple = (12, 1, 5, 8, 4)

可变性测试:列表 vs 元组

列表和元组的主要区别在于可变性。列表是可变数据类型,意味着其元素可以在初始化后进行更改、添加或删除。

另一方面,元组是不可变数据类型,在初始化后不能更改。任何尝试更改项的尝试都将导致错误。

示例

立即执行

输出

Given List: [14, 23, 39]
Modified List: [17, 23, 39]

Given Tuple: (14, 23, 39)
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<file-name> n <cell line: 0>()
      9 tst_tpl = (14, 23, 39)
     10 print("Given Tuple:", tst_tpl)
---> 11 tst_tpl[0] = 17  # TypeError: 'tuple' object does not support item assignment

TypeError: 'tuple' object does not support item assignment

说明

在上面的例子中,我们初始化了一个列表并使用索引来修改其元素。结果,列表被成功修改。而在元组的情况下,我们初始化了一个元组,但当我们尝试修改它时,可以看到返回了错误。

性能和内存比较:列表 vs 元组

与列表相比,元组通常更节省内存且速度更快。这是因为:

  • 列表需要额外的内存分配来进行动态调整大小。
  • 由于不可变性,元组以更优化的方式存储。

示例

立即执行

输出

104
80

说明

在上面的例子中,我们导入了 sys 模块并初始化了一个列表和一个元组。然后我们使用 getsizeof() 函数返回列表和元组的大小。结果,我们可以看到列表占用的内存比元组多。

何时使用列表?

当数据需要动态修改时(例如添加/删除元素),我们可以使用列表。当我们需要一个具有灵活操作的序列时,可以使用列表。在处理需要定期更新的大型数据集时,可以使用列表。

何时使用元组?

当数据应保持不变时(例如数据库记录、配置设置),使用元组。当性能是最重要因素且关键时,可以使用元组,因为元组速度更快且内存占用更少。元组还可以用作 字典 键,因为元组是可哈希的,而列表不是。

结论

我们已经学了很多关于列表和元组之间差异的知识。列表是元素的有序、可变集合。它允许我们执行各种修改,如添加、删除或更改元素,而元组是元素有序但不可变的集合,这意味着一旦创建,其元素就不能更改。

我们还通过表格了解了列表和元组之间的差异,这有助于我们简短地回顾这些差异。

Python 列表 vs 元组 - 常见问题解答

1. 为什么元组比列表快?

元组比列表快,因为它们是不可变的,这使得 Python 能够优化它们的存储和处理。由于元组不需要动态调整大小,因此其操作相对更有效。

2. 我们可以将列表转换为元组,反之亦然吗?

是的,我们可以使用 tuple() 函数将列表转换为元组,使用 list() 函数将元组转换为列表。

示例

让我们看一个例子

输出

Original List: [19, 24, 31]

List -> Tuple
New Tuple: (19, 24, 31)

Tuple -> List
New List: [19, 24, 31]

说明

在上面的例子中,我们初始化了一个列表,然后使用 tuple() 函数将列表转换为元组。然后我们使用 list() 函数将元组转换为列表。

3. 元组可以包含列表吗?

是的,元组可以包含列表作为元素。虽然元组本身是不可变的,但其中的列表仍然可以被修改。

示例

输出

(15, 23, [39, 14, 5])

说明

在上面的例子中,我们创建了一个包含列表的元组。然后我们使用索引来修改内部列表。结果,我们成功地更新了列表。所以,我们可以得出结论,元组内的列表是可以被修改的。

4. 元组可以用作字典键吗?

是的,元组可以用作字典键,因为它们是不可变的且可哈希的。但是,如果元组包含可变元素(如列表),则不能将其用作字典键。

示例

输出

Tuple as a Dictionary Key

5. 何时应该在列表之上使用元组?

当数据应保持不变时,可以使用元组(例如,在配置、数据库记录或固定元素集合中)。相比之下,当我们需要灵活性和频繁修改时,可以使用列表。


下一主题Python 集合