一、什么是元组
元组是Python中的另一种标准序列类型,与列表和字符串类似。元组也是有序的,可以包含任意类型的元素,而且可以通过索引和切片进行访问。
二、元组的组成
元组由多个用逗号隔开的值组成,例如:
>>>t = 12345, 54321, 'hello!' >>>t[0] 12345 >>>t (12345, 54321, 'hello!') >>># Tuples may be nested: ...u = t, (1, 2, 3, 4, 5) >>>u ((12345, 54321, 'hello!'), (1, 2, 3, 4, 5)) >>># Tuples are immutable: ...t[0] = 88888 Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: 'tuple' object does not support item assignment >>># but they can contain mutable objects: ...v = ([1, 2, 3], [3, 2, 1]) >>>v ([1, 2, 3], [3, 2, 1])
可以用多种方式构建元组:
- 使用一对圆括号来表示空元组: ();
- 使用一个后缀的逗号来表示单元组: a, 或 (a,);
- 使用以逗号分隔的多个项: a, b, c or (a, b, c);
- 使用内置的 tuple(): tuple() 或 tuple(iterable)。
元组在输出时通常要由圆括号括起来,以正确解释嵌套的元组。输入时,圆括号可以省略,但在某些情况下是必需的。不允许为元组中的单个元素赋值,当然,可以创建含列表等可变对象的元组。
注意:元组是不可变的,一旦创建就不能修改元组中的元素。所谓元组的不可变指的是元组所指向的内存中的内容不可变。但是,如果元组中包含可变对象(比如列表),则可以修改列表内部的元素。
>>> tup = ('W', '3', 'C', 's', 'c', 'h','o','o','l') >>> tup[0] = 'w' # 不支持修改元素 Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: 'tuple' object does not support item assignment >>> id(tup) # 查看内存地址 4440687904 >>> tup = (1,2,3) >>> id(tup) 4441088800 # 内存地址不一样了
构造 0 个或 1 个元素的元组比较特殊,为了适应这种情况,对句法有一些额外的改变。用一对空圆括号就可以创建空元组;只有一个元素的元组可以通过在这个元素后添加逗号来构建(圆括号里只有一个值的话不够明确)。虽不美观但是有效。例如:
>>>empty = () >>>singleton = 'hello', # <-- note trailing comma >>>len(empty) 0 >>>len(singleton) 1 >>>singleton ('hello',)
三、序列解包
- 语句t = 12345, 54321, ‘hello!’是 元组打包 的例子,值12345, 54321 和 ‘hello!’一起被打包进元组;
- 序列解包用于将一个序列解压成多个变量。例如:
>>>x, y, z = t;
- 序列解包时,左侧变量与右侧序列元素的数量应相等。
注意:多重赋值其实只是元组打包和序列解包的组合。