数据类型之元组
一、概要
- 元组创建
- 元组操作
二、元组创建
- 直接使用逗号、圆括号
t=(1,2,3)
print(type(t))#<class 'tuple'>
- 使用关键字tuple
t=tuple([1,2,3])
print(type(t))#<class 'tuple'>
注意:如果创建一个元素的元组,后面需要加逗号。
三、元组操作
之前说过元组是一种序列,那么序列的所有特性元组都是可以使用的。那么序列有哪些特性呢?
- 索引取值
- 分片
- 序列相加
- 序列乘法
- in运算符
- 序列内建函数
#索引、切片取值
t=(1,2,3,4,5,)
print(t[1:3])#(2, 3)
#元组相加
t=(1,2,3,4,5,)
t1=('hello',)
print(t+t1)#(1, 2, 3, 4, 5, 'hello')
#元组乘法
t=(1,2,3,4,5,)
print(t*2)#(1, 2, 3, 4, 5, 1, 2, 3, 4, 5)
#in运算符
t=(1,2,3,4,5,)
print(3 in t)#True
#内建函数
t=(1,2,3,4,5,)
print(len(t))#5
print(min(t))#1
print(max(t))#5
四、深入理解元组
- 元组是不可修改
>>> t1 = (1,2,3)
>>> t1[0]=5
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment
列表属于可变序列,它的元素可以随时修改或删除,元组是不可变序列,其中元素不可修改,只能整体替换。
如:
>>> t1 = (1,2,3)
>>> t2 = t1 + (6,7)
>>> t2
(1, 2, 3, 6, 7)
- 元组的性能略优于列表,原因在于元组创建使用的资源更少
>>> l1 = [1,2,3]
>>> t1 = (1,2,3)
>>> l1.__sizeof__()
64
>>> t1.__sizeof__()
48
可以看到都是三个元素,但是列表使用的空间更大64个字节,原因在于列表时动态的,所以它需要保存一些必要的数据,比如现在有多少个元素,以便于及时扩充。
另外元组是静态变量,在Python中静态变量会暂时进行缓存空间大小,下次创建一个一样长度的元组可以接着使用这个空间,而列表是动态的,如果没有变量引用它就会被回收其所占空间,以便于其它变量使用:
import timeit
print(timeit.timeit("list1=[1,2,3]"))
print(timeit.timeit("tuple1=(1,2,3)"))
"""
0.043586699990555644
0.011961799929849803
"""
- 底层数据结构
元组和列表一样,底层都是线性表来存储的
- 总结
元组比列表的访问和处理速度快,如果只需要访问不需要修改,建议使用元组。
列表不能作为字典的键,而元组则可以。
列表是动态数组,它们可变且可以重设长度(改变其内部元素的个数)
元组是静态数组,它们不可变,且其内部数据一旦创建便无法改变
作者:iveBoy
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须在文章页面给出原文连接,否则保留追究法律责任的权利。