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)。
    • 类似 JavaArrayList(但无自动扩容策略冲突)。
  • dict(哈希表)

    • 插入/更新:平均 O(1),哈希冲突时退化为 O(n)(罕见)。
    • 类似 JavaHashMap(无序哈希表)。
  • collections.deque(双向链表)

    • 插入:头尾操作 (appendleft, append) 均为 O(1)。
    • 类似 JavaLinkedList(但性能更高)。

2. 线程安全集合

  • queue.Queue

    • 底层:使用 threading.Lock 包装 deque
    • 插入put() 操作线程安全且 O(1)。
    • 类似 JavaConcurrentLinkedQueue
  • threading.Lock + dict/list

    • 示例:通过锁实现线程安全字典:
      import threading
      safe_dict = {}
      lock = threading.Lock()
      
      def update_dict(key, value):
          with lock:
              safe_dict[key] = value
      
    • 类似 JavaConcurrentHashMap(但需手动管理锁)。

3. 性能对比

操作 list dict deque queue.Queue
尾部插入 O(1) - O(1) O(1)
头部插入 O(n) - O(1) -
键值插入/更新 - O(1) - -
线程安全

扩展场景

  • 有序映射

    • 使用第三方库 sortedcontainers.SortedDict(类似 Java TreeMap),底层为 跳跃表 + 哈希表,插入/更新 O(log n)。
      from sortedcontainers import SortedDict
      sd = SortedDict({"b": 2, "a": 1})  # 按键排序
      
  • 高并发场景

    • 优先使用 queue.Queuemultiprocessing.Manager().dict()(跨进程共享)。

总结

  • 非线程安全:默认使用 listdictdeque,性能高但需自行处理线程竞争。
  • 线程安全:使用 queue 模块或手动加锁,牺牲部分性能换取安全性。
  • 底层结构:动态数组、哈希表、双向链表是 Python 集合的核心实现方式。

参考资料

posted @ 2025-03-29 22:10  向着朝阳  阅读(54)  评论(0)    收藏  举报