Python Tuple元组 定义 二项元组 访问 更新 删除

Python 元组Tuple

定义

元组是不可变序列,通常用于储存异构数据的多项集(例如由 enumerate()内置函数所产生的二元组)。 元组也被用于需要同构数据的不可变序列的情况例如允许存储到 setdict]的实例)。

  • class tuple([iterable])

    可以用多种方式构建元组:

    1. 使用一对圆括号来表示空元组: ()使用一个后缀的逗号来表示单元组: a,(a,)

    2. 使用以逗号分隔的多个项: a, b, c or (a, b, c)

    3. 使用内置的 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] 是二项元组,类型变量分别为T1T2Tuple[int, float, str] 是由整数、浮点数、字符串组成的三项元组。

可用省略号字面量指定同质变长元组,例如,Tuple[int, ...] 。TupleTuple[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
posted @ 2021-07-28 08:21  SKPrimin  阅读(316)  评论(0编辑  收藏  举报