今天再来认识python的一个新的数据类型 tuple,这个数据类型和list很像,但是tuple一旦初始化就不可以更改了,最让人遗憾是tuple,没有append(),insert()这些方法获取其中的元素的方法,只能是依靠索引。值得注意的是,tuple中的元素不能被赋值。
这样就让人十分困惑了,既然lIst数据类型这么好用,为什么还要创造tuple? 凡事都有利弊正因为tuple不可变,所以代码更加安全。如果可能,能用tuple代替list就要尽量使用。
需要注意的是:当你定义一个tuple时,定义时候,tuple的元素必须要初始化,然而在实际中我们可能需要定义一个空的tuple,我们可以这样写 tuple=(),如果要定义一个元素,你这样定义 tuple=(1),那么 tuple=1,我们定义的不是tuple这个数据类型而是1这个数,这是因为小括号()既可以表示tuple,又可以表示数学公式中的小括号,这就产生了歧义,所以ptython规定tuple只有一个元素时,必须加,来消除歧义,例如 tuple=(1,)。
我们可以选择折中的方式来定义一个“可变的”tuple:
1 t=('a','b',['A','B']) 2 t[2][0]='X' 3 t[2][1]='Y'
执行完上述代码后,我们发现t的结果变为('a’,'b',['X','Y']),这样结果就发生了变化。表面上看,tuple的元素确实变了,但其实变的不是tuple的元素,而是list的元素。tuple一开始指向的list并没有改成别的list,所以,tuple所谓的“不变”是说,tuple的每个元素,指向永远不变。即指向'a'
,就不能改成指向'b'
,指向一个list,就不能改成指向其他对象,但指向的这个list本身是可变的!