列表的动态扩容与元组的静态缓存:内存与性能的博弈
列表与元组:同根生的两种数组实现Python 中列表和元组都基于数组实现,但设计哲学截然不同:列表是动态数组,支持增删改,允许运行时调整大小;元组是静态数组,创建后不可变,内容固定。这两种选择直接影响了内存占用、创建速度和修改代价,理解其底层机制是编写高性能 Python 代码的关键一步。列表的动态扩容:overallocation 的代价与收益append 背后的自动扩容公式当对一个列表执行append操作时,如果当前容量已满,Python 会分配更大的新内存块,将旧数据复制过去,然后释放旧列表。为了防止频繁触发这种昂贵的复制操作,Python 会超额分配(overallocation)额外空间,为后续 append 预留头部空间。在 Python 3.12.2 中,列表扩容公式为:M=(N+(N