CodeRoadMap
首页路线题库资源库文章社区
CodeRoadMap

程序员的学习成长路线图。内容免费开放,登录后可同步路线图与课时进度。

由 程序员柏风 独立维护 · 关于作者

学习

  • 路线图
  • 课程
  • 面试题
  • 文章
  • 我

更多

  • 资源
  • 社区
  • 关于作者
  • 内容说明

© 2026 CodeRoadMap

津ICP备2026012044号-1·津公网安备12011002026155号·coderoadmap@126.com
Python 进阶/课时/类型与数据结构
RawBlame
课时目录12 节

Python 进阶

  1. 01Python 进阶地图
  2. 02类型与数据结构
  3. 03OOP 深入
  4. 04函数式特性
  5. 05并发与异步
  6. 06Web 框架
  7. 07包管理与虚拟环境
  8. 08静态类型与校验
  9. 09测试框架
  10. 10代码质量工具
  11. 11算法与数据结构
  12. 12综合练习

类型与数据结构

tuples、sets、typing、type-annot、variables-and-data-types。

30 分钟

内置类型与内存模型

在 python-fundamentals 里你已用过 list、dict、set;本课深入可变/不可变、引用语义、拷贝与性能,这是写出正确并发代码与高效算法的前提。路线图节点见 /roadmaps/python;AI 数据处理常涉及大量容器操作,可与 ai-agents-essentials 并行。

学习目标

  • 区分可变对象与不可变对象及其赋值行为
  • 正确使用浅拷贝、深拷贝与 copy 模块
  • 理解 dict/set 的哈希要求与常见性能陷阱

可变 vs 不可变

# 不可变:int, float, str, tuple, frozenset, bytes
a = "hello"
b = a
b = b + " world"   # 创建新 str,a 不变

# 可变:list, dict, set, bytearray
xs = [1, 2, 3]
ys = xs
ys.append(4)       # xs 也变成 [1, 2, 3, 4]

函数默认参数的可变陷阱:

def add_item(item, bucket=[]):  # 危险:共享同一 list
    bucket.append(item)
    return bucket

# 正确写法
def add_item_safe(item, bucket=None):
    if bucket is None:
        bucket = []
    bucket.append(item)
    return bucket

拷贝

import copy

original = {"tags": ["python", "async"], "meta": {"level": "advanced"}}
shallow = copy.copy(original)
deep = copy.deepcopy(original)

shallow["tags"].append("typing")   # original["tags"] 也会变
deep["meta"]["level"] = "expert"   # original 不受影响

dict 与 set 的哈希

键必须是可哈希的(不可变且实现 __hash__):

# OK
registry = {("pya-types", 1): "lesson"}

# TypeError: unhashable type 'list'
# bad = {[1, 2]: "value"}

练习

  • 写一段代码演示 is 与 == 在 small int 与 list 上的差异
  • 用 timeit 比较 list 推导与 for 循环构建 1e5 元素列表的耗时
  • 解释为何 dict 键不能是 list

小结

Python 变量是引用,不是盒子。 掌握可变性与拷贝,才能避免隐蔽 bug,并为 OOP 与 async 共享状态问题做好准备。

加载本节练习…
← 上一课
Python 进阶地图
下一课 →OOP 深入