赞
赏
Python 的 元祖 和 列表 都是一个可以存放任意数据类型的集合。 但 Python 的元祖和列表最大的区别就是元祖的数据不可以修改,列表的数据可以任意的修改。
修改元祖数据,程序会报错
print("嗨客网(www.haicoder.net)")
# 修改元祖数据,程序会报错
tup = ("Hello", "HaiCoder", 1024)
tup[0] = "hello"
程序运行后,控制台输出如下:
我们使用 () 创建了一个元祖 tup,元祖的第一个和第二个元素都是 string 类型,第三个元素是 int 类型的。接着,我们试图修改元祖的索引为 0 的元素,结果程序报错,因为元祖的数据不可以被修改。
列表的数据可以被修改,可以被扩容
print("嗨客网(www.haicoder.net)")
# 列表的数据可以被修改,可以被扩容
lis = ["Hello", "HaiCoder", 1024]
lis[0] = 'hello'
lis.append("嗨客网")
print(lis)
程序运行后,控制台输出如下:
我们使用 [] 创建了一个列表 lis,列表的第一个和第二个元素都是 string 类型,第三个元素是 int 类型的。
接着,我们修改了列表的第一个元素,并且使用 append 函数为列表增加了一个元素,最后打印列表的内容,程序正常运行。
Python 元祖的效率比列表效率快
python -m timeit 'x=[1,2,3,4,5,6,7]'
python -m timeit 'x=(1,2,3,4,5,6,7)'
程序运行后,控制台输出如下:
我们在命令行中,分别输入以上的两行代码,第一个创建一个含有七个变量的列表,第二个创建同样大小的元祖。结果,我们发现,创建元祖的时间比创建列表的时间几乎少了一半。
如果,我们在 循环 中创建列表与元祖,那么他们的性能差别会更大,因此如果不需要修改元素,那么我们首先选择使用元祖而不是列表。
列表的本质是一个动态数组,它的元素可以被修改并且可以重设长度(改变其内部元素的个数)。元组是静态数组,它们不可变,且其内部数据一旦创建便无法改变,也可以简单的认为元祖时一个只读的列表。
元组缓存于Python运行时环境,这意味着我们每次使用元组时无须访问内核去分配内存。元组要比列表更加轻量级,所以从总体上来说,元组的性能速度要由于列表。