找回密码
 立即注册
搜索
查看: 306|回复: 2

在 Python 中列表,元组,集合,字典的区别

[复制链接]

27

主题

30

回帖

194

积分

管理员

积分
194
发表于 2026-6-18 15:54:58 | 显示全部楼层 |阅读模式
在 Python 中,列表(List)、元组(Tuple)、集合(Set) 和 字典(Dictionary) 是四种最基础也是最常用的数据结构。
它们最核心的区别在于是否可变、是否有序以及是否允许重复元素。为了方便你快速对比和记忆,我先用一张表总结,再逐一详解。
一、核心区别速查表

数据类型
英文
是否有序
是否可变
是否允许重复
元素形式
适用场景
列表list有序(索引定位)可变(增删改)允许重复任意类型元素存储同类型数据序列(如用户列表、商品清单)
元组tuple有序(索引定位)不可变(只读)允许重复任意类型元素存储固定不变的数据(如坐标、数据库连接配置)
集合set无序(无索引)可变(增删)不允许重复(自动去重)任意类型元素去重、交集并集等数学运算、关系测试
字典dict有序(Python 3.7+,键值对按插入顺序)可变(增删改)键(Key)不允许重复,值(Value)可重复键值对(Key: Value)存储具有映射关系的数据(如身份证号对应个人信息)
回复

使用道具 举报

27

主题

30

回帖

194

积分

管理员

积分
194
 楼主| 发表于 2026-6-18 16:00:22 | 显示全部楼层
二、逐一深度解读(含代码示例)

1. 列表(List)—— 灵活的“数组”
  • 特征:用方括号 [] 定义。它是 Python 中最常用的数据结构,支持切片、索引、迭代。
  • 内存:可变,因此修改时内存地址不变,但会预分配空间以容纳后续添加,内存占用稍大。
  • 操作:支持 append()、insert()、pop()、remove() 等。
    1. my_list = [1, 2, 3, 2]  # 允许重复
    2. my_list.append(4)       # 变为 [1, 2, 3, 2, 4]
    3. print(my_list[1])       # 输出 2(支持索引)
    复制代码


2. 元组(Tuple)—— 不可变的“记录”
  • 特征:用圆括号 () 定义。一旦创建,长度和内容均不可变。
  • 内存:不可变,因此结构更轻量,遍历速度比列表快,且可作为字典的键(Key)(列表不行)。
  • 操作:仅支持 count() 和 index() 查询,无增删改方法。
    1. my_tuple = (10, 20, 30)
    2. # my_tuple[0] = 100  # 报错!元组不支持修改
    3. x, y, z = my_tuple   # 支持解包,输出 10 20 30
    复制代码


3. 集合(Set)—— 无序的“去重器”
  • 特征:用花括号 {} 或 set() 定义。基于哈希表实现,元素必须可哈希(不可变类型)。
  • 内存:元素唯一,专为快速成员检测(in 操作)和数学运算设计。
  • 操作:支持 add()、remove(),以及 union(并集)、intersection(交集)、difference(差集)。
    1. my_set = {1, 2, 3, 2}  # 自动去重为 {1, 2, 3}
    2. my_set.add(4)          # 变为 {1, 2, 3, 4}
    3. # print(my_set[0])     # 报错!集合无序,不支持索引
    复制代码


4. 字典(Dictionary)—— 快速的“映射表”
  • 特征:用 {key: value} 定义。通过键(Key)来存取值(Value),键必须是不可变类型(如字符串、数字、元组)。
  • 内存:底层也是哈希表,查询速度极快,与数据量大小无关(常数级时间复杂度)。
  • 操作:支持 keys()、values()、items() 遍历,以及 get() 安全取值。
    1. my_dict = {"name": "Alice", "age": 25}
    2. my_dict["age"] = 26     # 修改值
    3. my_dict["city"] = "NY"  # 新增键值对
    4. # my_dict 输出为 {'name': 'Alice', 'age': 26, 'city': 'NY'}(Python 3.7+ 有序)
    复制代码



回复

使用道具 举报

27

主题

30

回帖

194

积分

管理员

积分
194
 楼主| 发表于 2026-6-18 16:08:35 | 显示全部楼层
三、常见陷阱(避坑指南)

  • 如何用一句话区分它们?

    • 列表是“可变的有序序列”;元组是“不可变的有序序列”;集合是“可变的无序不重复序列”;字典是“可变的有序键值映射(键不重复)”。

  • 列表和元组如何选择?

    • 如果你需要存储固定不变的数据(例如一周七天、经纬度坐标),请用元组(更安全、更省内存);如果需要频繁增删改,请用列表。

  • 为什么字典和集合的键必须不可变?

    • 因为字典和集合依赖哈希值来快速定位。如果键是可变的(如列表),修改后哈希值会变,导致无法找到原存储位置,因此 Python 强制要求键必须为不可变类型。

  • Python 3.7 前后字典有什么区别?

    • Python 3.6 及以前:字典是无序的。
    • Python 3.7 及以后:字典保证插入顺序(类似列表的有序性)。如果你的代码需要兼容旧版本,不要依赖字典的顺序。

  • 如何将列表快速去重?

    • 最简单的做法:list(set(my_list)),但会丢失原有顺序。如需保持顺序,可用 dict.fromkeys(my_list).keys()。


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|老村长论坛

GMT+8, 2026-7-27 23:35 , Processed in 0.035542 second(s), 21 queries .

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表