Time: 2019-08-04
列表和元组都是可以放置任何数据类型的有序集合。
二者的区别
最重要的区别是:
- 列表是动态的,大小不固定,可以动态增删改
- 元组的静态的,大小固定,无法增删改
如果想改变元组呢?
可以重新开辟内存,创建新的元组。
tup = (1,2,3)
new_tup = tup + (5,) # 正确写法
new_tup = tup + (5,6) # 正确
new_tup = tup + (5) # 错误
向列表中添加新元素,无需开辟新内存,因为它本身是动态扩容的。
l = [1, 2, 3, 4]
l.append(5) # [1,2,3,4,5]
相互转换
- list()
- tuple()
二者存储的差异
列表是动态存储,使用的是over-allocating
机制。
以整型列表为例,初始空列表占用40B
空间,添加一个元素后,动态分配4个元素大小的空间,再添加,就不会分配,直到分配的用完,再动态分配4个元素大小的空间。
这样,增删的时间复杂度都是O(1)
。
性能分析
元组比列表轻量,因此总体来说,元组性能更优。
Python对静态资源的缓存机制
元组是一种静态资源,在其占用空间不大时,Python会缓存资源,因此访问性能会优于列表。
Python有垃圾回收机制,列表不用时会被回收。
- 元组初始化比列表初始化快5倍
列表初始化方式比较
lst = list()
lst = []
第一种是函数式生成,会创建stack,检查参数,较为昂贵。第二种是调用内置的C函数,性能比较好。
END.
网友评论