元组与列表相似,只不过元组内的值不能修改,但是可以整体重新赋值;
关于元组的几个要点:
1.元组的小括号也可以省略(Python就是这么无下限),但是逗号不能再省了:
tuple_1 = "a", "b", "c", "d"
print(type(tuple_1))
#输出:
<class 'tuple'>
#当然这样也可以:
tuple_1 = "a", #注意逗号不能省,否则tuple_1就变成字符串
print(type(tuple_1))
#输出:
<class 'tuple'>
2.对元组的操作基本和列表相似,除了元组内的元素不能动之外,对元组的整体删除、修改都是允许的,其它操作例如切片、拼接、+、*、等都与列表完全一样,这里不再介绍,可以看我上一篇关于列表的介绍,但是要注意像append、pop、insert等这种在元素层次上的方法在元组中是不能用的;
3.深刻理解元组的元素不变的含义:
看一个例子:
tuple_1 = ('a','b',[1,2,3])
for x in tuple_1[2]:
tuple_1[2][x-1] = 0 #注意这里x从1开始,所以要减1
print(tuple_1)
#输出:
('a', 'b', [0, 0, 0])
在这个例子中:元组tuple_1中的元素变了,但其实变得并不是元组内的元素,变的是列表中的元素,元组中指向的list仍旧是没有变的,你可以这么理解,元组内的元素所指向的地址是不允许修改的,但地址映射的对象本身是可以修改的,在这个例子中,list的地址仍旧没变,但内容却被修改了,所以不要被这个迷惑了;
再看一下代码解释吧:
list_1 = [1,2,3]
print(id(list_1))
print(id(list_1[0]))
tuple_1 = ('a','b',list_1)
for x in tuple_1[2]:
tuple_1[2][x-1] = 0
print(id(list_1))
print(id(list_1[0]))
#输出:
49249136
1354487984
49249136
1354487968
4.元组虽然不能修改元素,但是通过元组的切片、以及拼接等操作可以达到简洁修改元组元素的目的;
部分内容(不限于本文)参考自: