美文网首页
深入理解python列表和元组

深入理解python列表和元组

作者: Xyxtank | 来源:发表于2019-06-24 11:19 被阅读0次

    列表和元组的定义

    列表和元组都是一个可以放置任意数据类型的有序集合。这里需要注意三个词,任意、有序、集合,其实就是说明列表和元组是可以放置任意数据类型,其次是有序的,另外,它是一个集合。

    列表是动态的,它的长度大小不固定的,可以随意的增加、删除或者改变。

    l=[1,2,1,2,'name']
    l[4]='hello'
    print(l)
    
    [1, 2, 1, 2, 'hello']
    

    元组是静态的,它的长度大小是固定的,无法增加、删除或者改变。

    l=(1,2,1,2,'name')
    l[4]='hello'
    print(l)
    
    TypeError                                 Traceback (most recent call last)
    <ipython-input-7-1bc67cb7b49e> in <module>
          1 l=(1,2,1,2,'name')
    ----> 2 l[4]='hello'
          3 print(l)
    
    TypeError: 'tuple' object does not support item assignment
    

    列表和元组的存储方式

    列表是动态的、可变的,而元组是静态的、不可变的。

    列表的存储方式,如下所示:

    l=[]
    print(l.__sizeof__())
    l=[1]
    print(l.__sizeof__())
    l=[1,2]
    print(l.__sizeof__())
    l=[1,2,3]
    print(l.__sizeof__())
    l=[1,2,3,4]
    print(l.__sizeof__())
    
    40
    48
    56
    64
    72
    

    元组的存储方式,如下所示:

    l=()
    print(l.__sizeof__())
    l=(1,)
    print(l.__sizeof__())
    l=(1,2)
    print(l.__sizeof__())
    l=(1,2,3)
    print(l.__sizeof__())
    l=(1,2,3,4)
    print(l.__sizeof__())
    
    24
    32
    40
    48
    56
    

    存储同样的元素,元组使用的存储空间更小,要少16个字节。这是因为列表是动态的,所以列表中要存储指针,来指向对应的元素。另外,列表是可变的,所以需要额外存储已经分配的存储信息,因为它要知道现在已经存储了多少信息,还剩下多少,需不需要额外分配存储空间等等。所以,列表多出来的存储空间主要是:指针 + 存储空间长度。

    如下例子可以看到列表存储空间的变化:

    列表存储空间变化:

    l=[]
    print(f'列表:{l}')
    print(l.__sizeof__())
    
    l.append(1)#增加一个元素,存储空间增加32字节,由于添加的元素为int类型(8字节),那么可以存放32/8=4个元素。
    print(f'列表:{l}')
    print(l.__sizeof__())
    
    l.append(2)#增加一个元素
    print(f'列表:{l}')
    print(l.__sizeof__())
    
    l.append(3)
    print(f'列表:{l}')
    print(l.__sizeof__())
    
    l.append(4)
    print(f'列表:{l}')
    print(l.__sizeof__())
    
    l.append(5)#加入元素 5 之后,列表的空间不足,所以又额外分配了可以存储空间
    print(f'列表:{l}')
    print(l.__sizeof__())
    
    列表:[]
    40
    列表:[1]
    72
    列表:[1, 2]
    72
    列表:[1, 2, 3]
    72
    列表:[1, 2, 3, 4]
    72
    列表:[1, 2, 3, 4, 5]
    104
    

    列表和元组的性能

    从列表和元组的存储方式可以得出,元组的性能是优于列表的。

    元组和列表的初始化性能比较:

    import timeit
    
    print(timeit.timeit(stmt='x=(1,2,3,4,5,6)',number=100000))
    print(timeit.timeit(stmt='x=[1,2,3,4,5,6]',number=100000))
    
    0.004769199999827833
    0.01035909999973228
    

    相关文章

      网友评论

          本文标题:深入理解python列表和元组

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