元组是Python中不可变的标准类型之一
既然谈到不可变,那何为不可变呢?
拿int和list在id上的区别做比较:
# int
>>> i = 4
>>> id(i)
1636290384
>>> i += 1
>>> id(i)
1636290416
可以看出当i的值发生改变时,id也发生了改变
# list
>>> a = [1,2,3]
>>> id(a)
1686339190984
>>> a.append(4)
>>> a
[1, 2, 3, 4]
>>> id(a)
1686339190984
可见,虽然a发生了改变,但在append之后,还是指向同个内存地址,因为list是可变类型,可以在原处修改。
元组作为与字符串一样的不可变类型,具有同样的属性
>>> a = (1,2)
>>> a[0] = 2
Traceback (most recent call last):
File "<pyshell#10>", line 1, in <module>
a[0] = 2
TypeError: 'tuple' object does not support item assignment
当直接改变元组的值时,会发生报错。
回到正题,通过help(tuple)
和dir(tuple)
,发现tuple类型的函数还不算很多。
创建
在创建元组时,一定要记住一句话:
元组()
不是必须的,但是,
是必须要有的
>>> a = (1,2,3)
>>> type(a)
<class 'tuple'>
>>> a = 1,
>>> type(a)
<class 'tuple'>
# 空元组的创建
>>> c = tuple()
>>> c
()
记数(count)
语法:
T.count(value)
>>> tup1 = (1,2,4,2,2,3)
>>> tup1.count(2)
3
索引(index)
语法:
T.index(value, [start, [stop]])
>>> tup1
(1, 2, 4, 2, 2, 3)
>>> tup1
(1, 2, 4, 2, 2, 3)
修改
尽管元组时不可变的,但可以通过对元组进行组合来修改元组
>>> tup1
(1, 2, 4, 2, 2, 3)
>>> tup2 = ('a','b','v')
>>> tup3 = tup1 + tup2;tup3
(1, 2, 4, 2, 2, 3, 'a', 'b', 'v')
复制
元组可以通过*
进行复制
>>> tup = 1,
>>> tup1 = tup * 3;tup1
(1, 1, 1)
删除
元组可以通过del删除
>>> tup1
(1, 1, 1)
>>> del tup1
>>> tup1
Traceback (most recent call last):
File "<pyshell#29>", line 1, in <module>
tup1
NameError: name 'tup1' is not defined
删除后再访问就会报错