2025-10-22
python
00

目录

列表(List)和元组(Tuple)的区别
1. 基本定义
列表 (List)
元组 (Tuple)
2. 主要区别对比
3. 代码示例
创建方式
可变性测试
常用操作对比
4. 列表特有的方法
5. 性能比较
6. 使用场景
适合使用列表的场景:
适合使用元组的场景:
7. 转换和嵌套
8. 实际应用示例
总结

列表(List)和元组(Tuple)的区别

1. 基本定义

列表 (List)

  • 可变序列:创建后可以修改
  • 使用方括号 [] 定义

元组 (Tuple)

  • 不可变序列:创建后不能修改
  • 使用圆括号 () 定义

2. 主要区别对比

特性列表(List)元组(Tuple)
可变性✅ 可变❌ 不可变
语法方括号 []圆括号 ()
性能较慢较快
内存占用较多较少
使用场景需要修改的数据固定数据、字典键
内置方法较多较少

3. 代码示例

创建方式

python
# 列表创建 list1 = [1, 2, 3, 4, 5] list2 = list([1, 2, 3]) # 使用list()构造函数 # 元组创建 tuple1 = (1, 2, 3, 4, 5) tuple2 = 1, 2, 3 # 可以省略括号 tuple3 = tuple([1, 2, 3]) # 使用tuple()构造函数 tuple4 = (1,) # 单个元素的元组需要逗号

可变性测试

python
# 列表 - 可变 my_list = [1, 2, 3, 4] print("原始列表:", my_list) my_list[0] = 10 # ✅ 修改元素 my_list.append(5) # ✅ 添加元素 my_list.remove(2) # ✅ 删除元素 print("修改后列表:", my_list) # 元组 - 不可变 my_tuple = (1, 2, 3, 4) print("原始元组:", my_tuple) # my_tuple[0] = 10 # ❌ 报错: 'tuple' object does not support item assignment # my_tuple.append(5) # ❌ 报错: 'tuple' object has no attribute 'append'

常用操作对比

python
# 共同支持的操作(都不会修改原对象) my_list = [1, 2, 3, 4, 5] my_tuple = (1, 2, 3, 4, 5) print("索引访问:") print("列表[0]:", my_list[0]) # 1 print("元组[0]:", my_tuple[0]) # 1 print("\n切片操作:") print("列表[1:3]:", my_list[1:3]) # [2, 3] print("元组[1:3]:", my_tuple[1:3]) # (2, 3) print("\n长度:") print("列表长度:", len(my_list)) # 5 print("元组长度:", len(my_tuple)) # 5 print("\n包含检查:") print("3在列表中:", 3 in my_list) # True print("3在元组中:", 3 in my_tuple) # True

4. 列表特有的方法

python
# 列表的修改方法 my_list = [1, 2, 3] # 添加元素 my_list.append(4) # [1, 2, 3, 4] my_list.insert(1, 1.5) # [1, 1.5, 2, 3, 4] my_list.extend([5, 6]) # [1, 1.5, 2, 3, 4, 5, 6] # 删除元素 my_list.remove(1.5) # [1, 2, 3, 4, 5, 6] popped = my_list.pop() # 删除最后一个元素,返回6 popped2 = my_list.pop(0) # 删除第一个元素,返回1 del my_list[1] # 删除索引为1的元素 # 其他修改方法 my_list.clear() # 清空列表 [] my_list = [3, 1, 4, 1, 5, 9] my_list.sort() # 排序 [1, 1, 3, 4, 5, 9] my_list.reverse() # 反转 [9, 5, 4, 3, 1, 1]

5. 性能比较

python
import time import sys # 创建大量数据 size = 1000000 # 列表性能测试 start_time = time.time() list_data = [i for i in range(size)] list_time = time.time() - start_time # 元组性能测试 start_time = time.time() tuple_data = tuple(i for i in range(size)) tuple_time = time.time() - start_time print(f"创建时间 - 列表: {list_time:.4f}秒, 元组: {tuple_time:.4f}秒") print(f"内存占用 - 列表: {sys.getsizeof(list_data)}字节, 元组: {sys.getsizeof(tuple_data)}字节")

6. 使用场景

适合使用列表的场景:

python
# 1. 需要频繁修改的数据 shopping_cart = ['apple', 'banana', 'milk'] shopping_cart.append('bread') shopping_cart.remove('banana') # 2. 数据收集和处理 scores = [] scores.append(85) scores.append(92) scores.sort() # 3. 需要多种方法操作的序列 data = [1, 5, 2, 8, 3] data.sort() data.reverse()

适合使用元组的场景:

python
# 1. 固定数据(如配置信息) DATABASE_CONFIG = ('localhost', 3306, 'my_db', 'user', 'password') # 2. 字典的键(必须是不可变类型) color_codes = { (255, 0, 0): '红色', (0, 255, 0): '绿色', (0, 0, 255): '蓝色' } # 3. 函数返回多个值 def get_user_info(user_id): # 返回不可变的数据组 return ('Alice', 25, 'alice@example.com') name, age, email = get_user_info(1) # 4. 保证数据安全 constants = (3.14159, 2.71828, 9.8) # 不会被意外修改

7. 转换和嵌套

python
# 相互转换 my_list = [1, 2, 3] my_tuple = tuple(my_list) # 列表转元组 (1, 2, 3) my_tuple = (4, 5, 6) my_list = list(my_tuple) # 元组转列表 [4, 5, 6] # 嵌套结构 # 列表中包含元组 mixed_list = [(1, 'a'), (2, 'b'), (3, 'c')] # 元组中包含列表 mixed_tuple = ([1, 2, 3], [4, 5, 6], [7, 8, 9]) # 注意:元组中的列表仍然可以修改! mixed_tuple[0].append(4) # ✅ 可以,因为修改的是列表而不是元组

8. 实际应用示例

python
# 学生成绩管理系统 - 使用列表存储可变数据 students_scores = [ ['Alice', [85, 92, 78]], ['Bob', [76, 88, 95]], ['Charlie', [90, 85, 92]] ] # 添加新学生 students_scores.append(['David', [82, 79, 88]]) # 修改成绩 students_scores[0][1].append(95) # 系统配置 - 使用元组存储固定配置 APP_CONFIG = ( '1.0.0', # 版本号 'production', # 环境 True, # 调试模式 ('127.0.0.1', 8000) # 服务器地址和端口 ) # 函数返回多个值 - 使用元组 def calculate_statistics(numbers): total = sum(numbers) count = len(numbers) average = total / count maximum = max(numbers) minimum = min(numbers) return total, count, average, maximum, minimum # 解包元组返回值 total, count, avg, max_val, min_val = calculate_statistics([1, 2, 3, 4, 5])

总结

  • 列表:适合存储需要频繁修改的数据序列
  • 元组:适合存储固定不变的数据,具有更好的性能和内存效率
  • 选择依据:根据数据是否需要修改来决定使用列表还是元组
  • 在不需要修改数据时,优先考虑使用元组以获得更好的性能
如果对你有用的话,可以打赏哦
打赏
ali pay
wechat pay

本文作者:李佳玮

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!