美文网首页
列表 vs. 元组

列表 vs. 元组

作者: 钢笔先生 | 来源:发表于2019-08-04 20:11 被阅读0次

    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.

    相关文章

      网友评论

          本文标题:列表 vs. 元组

          本文链接:https://www.haomeiwen.com/subject/penydctx.html