python List, Dict, Tuple, Any
目录
tuple
是一种 不可变的有序序列类型,用于存储多个元素。
1. 基本定义
- 不可变性:一旦创建,元组的元素不能修改(增、删、改)。
- 语法:用逗号分隔元素,通常用圆括号
()包裹。my_tuple = (1, "hello", 3.14) # 显式定义 another_tuple = 42, "world" # 隐式定义(括号可省略)
2. 与 list 的区别
| 特性 | tuple |
list |
|---|---|---|
| 可变性 | ❌ 不可变 | ✅ 可变 |
| 语法 | (1, 2) |
[1, 2] |
| 性能 | 更高(适合常量) | 略低 |
| 用途 | 数据保护、字典键 | 动态数据操作 |
Python入门教程笔记(四)元组(tuple)及字典(dict)
https://cloud.tencent.com/developer/article/1736566
Python内置了字典:dict的支持,dict全称dictionary,在其他语言中也称为map,使用键-值(key-value)存储,具有极快的查找速度。
dict
字典的每个键值 key:value 对用冒号 : 分割,每个键值对之间用逗号 , 分割,整个字典包括在花括号 {} 中 ,格式如下所示:
d = {key1 : value1, key2 : value2 }
d={} 空字典
字典值可以没有限制地取任何 python 对象,既可以是标准的对象,也可以是用户定义的,但键不行。
键必须不可变,所以可以用数字,字符串或元组充当,所以用列表就不行,如下实例:
list
list = [] # 初始化空list
读取原始 list[element index]
往list追加 list.append(i)
Deepseek总结
以下是 Python 中常见集合类型及其对应 Java 集合的类比,按 线程安全性 分类,并描述底层数据结构、插入/更新性能特点:
Python 集合分类(类似 Java Collections)
| Python 类型/模块 | 线程安全 | 底层数据结构 | 插入速度 | 更新速度 | 使用场景 |
|---|---|---|---|---|---|
list |
非安全 | 动态数组 | 尾部 O(1) | 索引 O(1) | 快速随机访问,尾部操作频繁的场景。 |
dict |
非安全 | 哈希表 | 平均 O(1) | 平均 O(1) | 键值对存储,快速查找和插入。 |
set |
非安全 | 哈希表(仅键) | 平均 O(1) | 无更新操作 | 去重集合,成员关系检测。 |
collections.deque |
非安全 | 双向链表(块状数组) | 头尾 O(1) | 无直接更新 | 高效头尾插入/删除(如队列、栈)。 |
collections.OrderedDict |
非安全 | 哈希表 + 双向链表 | 平均 O(1) | 平均 O(1) | 有序键值对(按插入顺序)。 |
queue.Queue |
安全 | 锁 + deque |
O(1) | 不支持 | 多线程安全 FIFO 队列。 |
queue.LifoQueue |
安全 | 锁 + list |
O(1) | 不支持 | 多线程安全栈(LIFO)。 |
multiprocessing.Queue |
安全 | 进程间通信管道 | O(1) | 不支持 | 跨进程安全队列(多进程场景)。 |
threading.Lock + 原生结构 |
安全 | 自定义封装 | 依赖原生结构 | 依赖原生结构 | 通过加锁实现线程安全(如线程安全字典)。 |
关键特性详解
1. 非线程安全集合
-
list(动态数组)- 插入:尾部追加 (
append) 为 O(1),中间插入 (insert) 为 O(n)。 - 更新:通过索引直接修改 (
list[i] = x) 为 O(1)。 - 类似 Java:
ArrayList(但无自动扩容策略冲突)。
- 插入:尾部追加 (
-
dict(哈希表)- 插入/更新:平均 O(1),哈希冲突时退化为 O(n)(罕见)。
- 类似 Java:
HashMap(无序哈希表)。
-
collections.deque(双向链表)- 插入:头尾操作 (
appendleft,append) 均为 O(1)。 - 类似 Java:
LinkedList(但性能更高)。
- 插入:头尾操作 (
2. 线程安全集合
-
queue.Queue- 底层:使用
threading.Lock包装deque。 - 插入:
put()操作线程安全且 O(1)。 - 类似 Java:
ConcurrentLinkedQueue。
- 底层:使用
-
threading.Lock + dict/list- 示例:通过锁实现线程安全字典:
import threading safe_dict = {} lock = threading.Lock() def update_dict(key, value): with lock: safe_dict[key] = value - 类似 Java:
ConcurrentHashMap(但需手动管理锁)。
- 示例:通过锁实现线程安全字典:
3. 性能对比
| 操作 | list |
dict |
deque |
queue.Queue |
|---|---|---|---|---|
| 尾部插入 | O(1) | - | O(1) | O(1) |
| 头部插入 | O(n) | - | O(1) | - |
| 键值插入/更新 | - | O(1) | - | - |
| 线程安全 | 否 | 否 | 否 | 是 |
扩展场景
-
有序映射:
- 使用第三方库
sortedcontainers.SortedDict(类似 JavaTreeMap),底层为 跳跃表 + 哈希表,插入/更新 O(log n)。from sortedcontainers import SortedDict sd = SortedDict({"b": 2, "a": 1}) # 按键排序
- 使用第三方库
-
高并发场景:
- 优先使用
queue.Queue或multiprocessing.Manager().dict()(跨进程共享)。
- 优先使用
总结
- 非线程安全:默认使用
list、dict、deque,性能高但需自行处理线程竞争。 - 线程安全:使用
queue模块或手动加锁,牺牲部分性能换取安全性。 - 底层结构:动态数组、哈希表、双向链表是 Python 集合的核心实现方式。

浙公网安备 33010602011771号