说起Python的数据结构,很多人第一反应是什么?
“这还不简单?” 是的,Python的数据结构确实比C 那种指针乱飞的世界友好太多,但是真正用起来,很多人又容易踩坑,甚至有些高级用法直接被忽略了。
比如,你知道列表(list)在Python底层是如何动态扩容的吗?
你知道字典(dict)的查找为什么那么快?
你知道元组(tuple)真的不可变吗?
今天,做一下深度解析,供参考!
一、列表(List):Python最灵活的数据结构
1. 基本用法
列表(list)是Python中最常见的数据结构,它支持存储多个元素,并且可以包含不同类型的数据。
1.1 创建列表


1.2 访问和修改列表元素

1.3 添加元素

1.4 删除元素

1.5 遍历列表

2. 列表的底层原理:动态数组
Python的 list 其实就是动态数组,类似C语言的 malloc,它会预留一定的空间,存放数据。如果超出了容量,Python会自动扩容,避免频繁分配内存的性能损耗。
2.1 Python列表是如何扩容的?

总结:
l Python的 list 采用动态数组存储元素。
l 自动扩容 机制提高性能,但如果知道最终大小,可以用 lst = [None] * n 预分配。
二、字典(Dict):Python的查找神器
1. 字典的基本用法
字典(dict)是一种键值对(key-value)存储的数据结构,类似现实中的“联系人列表”:
2. 字典的查找为什么快?
字典的查询速度比列表快很多,因为字典是基于哈希表(Hash Table)实现的。来看下面的对比:

结果:字典查找远快于列表,因为字典的键存储在哈希表中,查找时直接通过哈希计算位置,而列表需要逐个扫描(O(n))。