Python元祖(tuple)与列表(list)区别

Python元祖(tuple)与列表(list)区别教程

Python元祖列表 都是一个可以存放任意数据类型的集合。 但 Python 的元祖和列表最大的区别就是元祖的数据不可以修改,列表的数据可以任意的修改。

Python元祖(tuple)与列表(list)本质

  • 列表是用于保存多个互相独立对象的数据集合。
  • 元组用于描述一个不会改变的事务的多个属性。

Python元祖(tuple)与列表(list)区别

  • 列表的本质是一个动态数组,它的元素可以被修改并且可以重设长度(改变其内部元素的个数)。
  • 元组是静态数组,它们不可变,且其内部数据一旦创建便无法改变,也可以简单的认为元祖时一个只读的列表。
  • 元组缓存于 Python 运行时环境,这意味着我们每次使用元组时无须访问内核去分配内存。
  • 元组要比列表更加轻量级,所以从总体上来说,元组的性能速度要由于列表。

案例

修改元祖数据

修改元祖数据,程序会报错

print("嗨客网(www.haicoder.net)") # 修改元祖数据,程序会报错 tup = ("Hello", "HaiCoder", 1024) tup[0] = "hello"

程序运行后,控制台输出如下:

83 python元祖与列表区别.png

我们使用 () 创建了一个元祖 tup,元祖的第一个和第二个元素都是 string 类型,第三个元素是 int 类型的。接着,我们试图修改元祖的索引为 0 的元素,结果程序报错,因为元祖的数据不可以被修改。

修改列表数据

列表的数据可以被修改,可以被扩容

print("嗨客网(www.haicoder.net)") # 列表的数据可以被修改,可以被扩容 lis = ["Hello", "HaiCoder", 1024] lis[0] = 'hello' lis.append("嗨客网") print(lis)

程序运行后,控制台输出如下:

84 python元祖与列表区别.png

我们使用 [] 创建了一个列表 lis,列表的第一个和第二个元素都是 string 类型,第三个元素是 int 类型的。

接着,我们修改了列表的第一个元素,并且使用 append 函数为列表增加了一个元素,最后打印列表的内容,程序正常运行。

Python 元祖与列表效率对比

Python 元祖的效率比列表效率快

python -m timeit 'x=[1,2,3,4,5,6,7]' python -m timeit 'x=(1,2,3,4,5,6,7)'

程序运行后,控制台输出如下:

85 python元祖与列表区别.png

我们在命令行中,分别输入以上的两行代码,第一个创建一个含有七个变量的列表,第二个创建同样大小的元祖。结果,我们发现,创建元祖的时间比创建列表的时间几乎少了一半。

如果,我们在 循环 中创建列表与元祖,那么他们的性能差别会更大,因此如果不需要修改元素,那么我们首先选择使用元祖而不是列表。

Python元祖(tuple)与列表(list)区别总结

列表的本质是一个动态数组,它的元素可以被修改并且可以重设长度(改变其内部元素的个数)。元组是静态数组,它们不可变,且其内部数据一旦创建便无法改变,也可以简单的认为元祖时一个只读的列表。

元组缓存于Python运行时环境,这意味着我们每次使用元组时无须访问内核去分配内存。元组要比列表更加轻量级,所以从总体上来说,元组的性能速度要由于列表。