Fork me on GitHub

数据类型之元组

一、概要

  • 元组创建
  • 元组操作

二、元组创建

  • 直接使用逗号、圆括号
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
"""
  • 底层数据结构

元组和列表一样,底层都是线性表来存储的

  • 总结

元组比列表的访问和处理速度快,如果只需要访问不需要修改,建议使用元组。

列表不能作为字典的键,而元组则可以。

列表是动态数组,它们可变且可以重设长度(改变其内部元素的个数)

元组是静态数组,它们不可变,且其内部数据一旦创建便无法改变

posted @ 2023-01-19 16:57  iveBoy  阅读(7)  评论(0)    收藏  举报
TOP