定义:
tuple是另一种有序的列表,中文翻译为“ 元组 ”。
形式:(元素1, 元素二, …)
如:表示班里同学的名称,用tuple表示如下:
t = (‘Adam’, ‘Lisa’, ‘Bart’)
tuple和list的异同
- 形式: tuple 和 list 非常类似,list的元素是用[]包裹的,tuple的元素是用()包裹的;
- list创建后,可以进行修改,有append()、insert()和pop()方法;tuple一旦创建完毕,就不能修改了,也就没有list的那些方法。
- 获取 tuple 元素的方式和 list 是一模一样的,我们可以正常使用 t[0],t[-1]等索引方式访问元素,但是不能赋值成别的元素
创建单元素tuple
t = (1)
print t # 1
竟然是整数1,为啥呢?
因为( )既可以表示tuple,又可以作为括号表示运算时的优先级,结果 (1) 被Python解释器计算出结果 1,导致我们得到的不是tuple,而是整数 1。
所以 Python 规定: 单元素 tuple 要多加一个逗号“,” ,这样就避免了歧义:
t = (1,)
print t # (1,)
Python在打印单元素tuple时,也自动添加了一个“,”,为了更明确地告诉你这是一个tuple。
多元素 tuple 加不加这个额外的“,”效果是一样的:
t = (1, 2, 3,)
print t #(1, 2, 3)
“可变”的tuple
t = (‘a’, ‘b’, [‘A’, ‘B’])
t 有 3 个元素:‘a’,'b’和一个list:[‘A’, ‘B’]。list作为一个整体是tuple的第3个元素。list对象可以通过 t[2] 拿到:
L = t[2]
然后,我们把list的两个元素改一改:
L[0] = ‘X’
L[1] = ‘Y’
print t # (‘a’, ‘b’, [‘X’, ‘Y’])
不是说tuple一旦定义后就不可变了吗?怎么现在又变了?
我们先看看定义的时候tuple包含的3个元素:
当我们把list的元素’A’和’B’修改为’X’和’Y’后,tuple变为:
表面上看,tuple的元素确实变了,但其实变的不是 tuple 的元素,而是list的元素。
tuple一开始指向的list并没有改成别的list,所以,tuple所谓的“不变”是说,tuple的每个元素指向永远不变。即指向’a’,就不能改成指向’b’,指向一个list,就不能改成指向其他对象,但指向的这个list本身是可变的!
修改上述tuple的内容不可变:
t = (‘a’, ‘b’, (‘A’, ‘B’))