Python Tuple元组 定义 二项元组 访问 更新 删除
Python 元组Tuple
定义
元组是不可变序列,通常用于储存异构数据的多项集(例如由 enumerate()
内置函数所产生的二元组)。 元组也被用于需要同构数据的不可变序列的情况例如允许存储到 set
或 dict
]的实例)。
-
class
tuple
([iterable])可以用多种方式构建元组:
-
使用一对圆括号来表示空元组:
()
使用一个后缀的逗号来表示单元组:a,
或(a,)
-
使用以逗号分隔的多个项:
a, b, c
or(a, b, c)
-
使用内置的
tuple()
:tuple()
或tuple(iterable)
-
构造器将构造一个元组,其中的项与 iterable
中的项具有相同的值与顺序。iterable
可以是序列、支持迭代的容器或其他可迭代对象。 如果 iterable
已经是一个元组,会不加改变地将其返回。
>>> t = 1,
(1,)
>>> t = (1, 2, 3, 4, 5, 6, 7, 8 ,9)
(1, 2, 3, 4, 5, 6, 7, 8, 9)
>>> tuple("abcd")
('a', 'b', 'c', 'd')
例如,tuple('abc')
返回 ('a', 'b', 'c')
而 tuple( [1, 2, 3] )
返回 (1, 2, 3)
。 如果没有给出参数,构造器将创建一个空元组 ()
。请注意决定生成元组的其实是逗号而不是圆括号。 圆括号只是可选的,生成空元组或需要避免语法歧义的情况除外。 例如,f(a, b, c)
是在调用函数时附带三个参数,而 f((a, b, c))
则是在调用函数时附带一个三元组。元组实现了所有一般序列的操作。
对于通过名称访问相比通过索引访问更清晰的异构数据多项集,collections.namedtuple()
可能是比简单元组对象更为合适的选择。
二项元组
元组类型; Tuple[X, Y]
是二项元组类型,第一个元素的类型是 X
,第二个元素的类型是 Y
。空元组的类型可写为 Tuple[()]
。
例:Tuple[T1, T2]
是二项元组,类型变量分别为T1
和 T2
。Tuple[int, float, str]
是由整数、浮点数、字符串组成的三项元组。
可用省略号字面量指定同质变长元组,例如,Tuple[int, ...
] 。Tuple
与 Tuple[Any, ...]
等价,也与 tuple
等价。
>>> tuple[(5, 2.5)]
tuple[5, 2.5]
>>> tuple[(5, 2.5, 'a')]
tuple[5, 2.5, 'a']
>>> tuple(5, 2.5)
TypeError: tuple expected at most 1 argument, got 2
元组方法
访问
元组是有序系列,故能通过索引切片的方式访问
>>> t = 1, 2, 3, 4, 5, 6, 7, 8 ,9
>>> t[0]
1
>>> t[5:]
(6, 7, 8, 9)
>>> t[::-1]
(9, 8, 7, 6, 5, 4, 3, 2, 1)
>>> t2 = t[:] # 元组的复制
>>> t2
(1, 2, 3, 4, 5, 6, 7, 8, 9)
更新
元组是不可变序列不能修改,但可以通过创建同名元组进行更新
>>> t = 'fyz', 'yjk', 'xhr', 'zc'
>>> t[0] = 'fyznb'
TypeError: 'tuple' object does not support item assignment
>>> t = ('fyznb',) + t[1:]
>>> t
('fyznb', 'yjk', 'xhr', 'zc')
但其并不是修改本身,而是新建了一个元组
id
(object)
返回对象的“标识值”。该值是一个整数,在此对象的生命周期中保证是唯一且恒定的。两个生命期不重叠的对象可能具有相同的 id()
值。
CPython 实现细节:这是在内存中的对象的地址。
>>> t = 'fyz', 'yjk', 'xhr', 'zc'
>>> id(t)
1892821689984
>>> t = ('fyznb',) + t[1:]
>>> id(t)
1892822438192
可以发现两者id
不同,因而并不是同一个对象
删除
元组并不支持copy()
,claer()
,删除可以使用del强制删除,python的垃圾回收机制也会在某个对象不再被使用的时候自动进行清理
>>> t.clear()
AttributeError: 'tuple' object has no attribute 'clear'
>>> t.copy()
AttributeError: 'tuple' object has no attribute 'copy'
>>> del t
>>> t
NameError: name 't' is not defined