Python 学习 (基础)
2024/09/04
posted in
Python
2024/09/04
posted in
Python
本文记录 Python 学习要点
列表 | 元组 |
---|---|
动态 | 静态 |
可变 | 固定 |
较大 | 轻量 |
列表和元组都是可以存放任意数据类型的有序集合,并且都支持负数索引和切片操作,不同的是列表为动态可变,元组为静态不可变。
共同拥有的函数有count()
, index()
, reversed()
, sorted()
等,值得注意的是reverse()
和sort()
只支持数组,不支持元组,因为两方法都涉及修改原数组,而元组不可被改变。
元组本质上是 C 语言中的 array。当初始化一个元组,解释器向操作系统申请一定的内存,操作系统为元组对象分配所需要的内存,分配后该元组的内存大小固定不变。
当初始化一个列表,解释器会向操作系统申请多一些内存,比如初始化一个拥有两个元素的数组,解释器会向操作系统申请长度为 4 的数组的内存。这样避免了每次列表新增元素时都向操作系统请求分配内存,可提高效率。当列表为满时,列表才会再次向操作系统申请一定数量的内存。列表本质上也一样是 C 语言中的 Array,但因为列表会过量分配内存,所以是 over-allocated array。
可通过以下函数查询数组或元组的内存占用大小。
l = [1,2,3]
l.__sizeof__()
# 64
长度较小的元组若不再被引用,GC 机制不会将该部分内存回收,当再次创建同样大小的元组时,新元组会覆盖掉旧元组,不必重新寻找内存。
列表需要支持增删改操作,所以列表中除了存放元素,还会存放指针以完成修改操作。而元组则不需要存放额外的指针。
故元组的性能优于列表。
list()
和 []
都可创建列表。list()
是构造器,[]
直接调用底层 C 代码。
[]
性能优于list()
。
若需要对存放数据进行增删改操作,则选择列表。若存放的是静态的数据如经纬坐标等数据,则优先采用性能较优的元组。若对性能要求不高,也可以全部使用列表。