python学习10.08:Python元组和列表的区别

元组和列表同属序列类型,且均可以按照特定顺序存放一组数据,数据类型不受限制,只要是 Python 支持的数据类型就能够。那么,元组和列表有哪些区别呢?python

元组和列表最大的区别就是,列表中的元素能够进行任意修改,就比如是用铅笔在纸上写的字,写错了还能够擦除重写;而元组中的元素没法修改,除非将元组总体替换掉,就比如是用圆珠笔写的字,写了就擦不掉了,除非换一张纸。缓存

能够理解为,tuple 元组是一个只读版本的 list 列表。

须要注意的是,这样的差别势必会影响二者的存储方式,咱们来直接看下面的例子:函数

>>> listdemo = []
>>> listdemo.__sizeof__()
40
>>> tupleDemo = ()
>>> tupleDemo.__sizeof__()
24

能够看到,对于列表和元组来讲,虽然它们都是空的,但元组却比列表少占用 16 个字节,这是为何呢?oop

事实上,就是因为列表是动态的,它须要存储指针来指向对应的元素(占用 8 个字节)。另外,因为列表中元素可变,因此须要额外存储已经分配的长度大小(占用 8 个字节)。可是对于元组,状况就不一样了,元组长度大小固定,且存储元素不可变,因此存储空间也是固定的。性能

读者可能会问题,既然列表这么强大,还要元组这种序列类型干什么?spa

经过对比列表和元组存储方式的差别,咱们能够引伸出这样的结论,即元组要比列表更加轻量级,因此从整体上来讲,元组的性能速度要因为列表。操作系统

另外,Python 会在后台,对静态数据作一些资源缓存。一般来讲,由于垃圾回收机制的存在,若是一些变量不被使用了,Python 就会回收它们所占用的内存,返还给操做系统,以便其余变量或其余应用使用。指针

可是对于一些静态变量(好比元组),若是它不被使用而且占用空间不大时,Python 会暂时缓存这部份内存。这样的话,当下次再建立一样大小的元组时,Python 就能够不用再向操做系统发出请求去寻找内存,而是能够直接分配以前缓存的内存空间,这样就能大大加快程序的运行速度。code

下面的例子,是计算初始化一个相同元素的列表和元组分别所需的时间。咱们能够看到,元组的初始化速度要比列表快 5 倍。内存

C:\Users\mengma>python -m timeit 'x=(1,2,3,4,5,6)'
20000000 loops, best of 5: 9.97 nsec per loop
C:\Users\mengma>python -m timeit 'x=[1,2,3,4,5,6]'
5000000 loops, best of 5: 50.1 nsec per loop

固然,若是你想要增长、删减或者改变元素,那么列表显然更优。由于对于元组来讲,必须得经过新建一个元组来完成。

总的来讲,元组确实没有列表那么多功能,可是元组依旧是很重要的序列类型之一,元组的不可替代性体如今如下这些场景中:

  1. 元组做为不少内置函数和序列类型方法的返回值存在,也就是说,在使用某些函数或者方法时,它的返回值会元组类型,所以你必须对元组进行处理。
  2. 元组比列表的访问和处理速度更快,所以,当须要对指定元素进行访问,且不涉及修改元素的操做时,建议使用元组。
  3. 元组能够在映射(和集合的成员)中当作“键”使用,而列表不行。这会在后续章节中做详解介绍。
相关文章
相关标签/搜索