和列表一样,元组也是一种序列,不同的是,元组不可以被修改(字符串也是如此)。因此,元组属于不可变序列。
创建元组的方法同样很简单:
1、利用tuple函数:
>>> t1=tuple('python')
>>> t1
('p', 'y', 't', 'h', 'o', 'n')
2、直接赋值,元素间用逗号隔开:
>>> t2=1,2,3
>>> t2
(1, 2, 3)
>>> t2=5,
>>> t2
(5,)
>>> t2=5*(3+20,)
>>> t2
(23, 23, 23, 23, 23)
可以这么说,元组除了语法和不可修改之外,在操作上几乎和列表没有任何区别。能够用于列表的操作大多数都能够用于元组,在上篇列表中,这些操作也都详细演示过,因此不再重复。那么问题来了,既然元组与列表如此相似,python为何多此一举有了列表之后,又有元组呢?
元组的不可变性提供了某种完整性,可以保证自身在程序中不会被修改。而列表不能。元组还能作为字典的键,而列表也不能。
看下面一个关于元组的例子:
>>> t1=(1,2,[3,4])
>>> t2=(1,2,[3,4])
>>> t1==t2
True
>>> t1[2].append(5)
>>> t1
(1, 2, [3, 4, 5])
>>> t2
(1, 2, [3, 4])
>>> t1==t2
False
好像哪里不对劲,不是说元组是不可以被修改的吗?怎么上面这个例子的元组就被成功修改了呢?
这是因为元组的不可变仅在于自己本身的结构内存,而与内部的引用对象无关,如果引用的对象是可修改的(如列表),那么该项元素就能被修改,上面的例子就是这样。但如果,引用元素是字符串,元组等不可变对象,就不能被修改。如下:
>>> t=(1,2,(3,4))
>>> t[2].append(5)
Traceback (most recent call last):
File "
AttributeError: 'tuple' object has no attribute 'append'
>>>
直接报错了,提示元组没有append方法。
所以,元组的不可变性是相对而言的。相对与本身结构内存是不可变的,相对于内部引用对象,得视具体情况而定。