【Python学习笔记】python元组

python的元组(tuple)和列表(list)类似,是一个有序的列表,区别在于tuple是不能修改的,其初始化方式如下:

>>> classmates = ('Michael', 'Bob', 'Tracy')

现在,classmates这个tuple不能变了,它也没有append()insert()这样的方法。其他获取元素的方法和list是一样的,你可以正常地使用classmates[0]classmates[-1],但不能赋值成另外的元素。
不可变的tuple有什么意义?因为tuple不可变,所以代码更安全。如果可能,能用tuple代替list就尽量用tuple。
空tuple可以这么定义:

>>> t = ()
>>> t
()

要定义一个只有1个元素的tuple,如果你这么定义:

>>> t = (1)
>>> t
1

定义的不是tuple,是1这个数!这是因为括号()既可以表示tuple,又可以表示数学公式中的小括号,这就产生了歧义,因此,Python规定,这种情况下,按小括号进行计算,计算结果自然是1

所以,只有1个元素的tuple定义时必须加一个逗号,,来消除歧义:

>>> t = (1,)
>>> t
(1,)

Python在显示只有1个元素的tuple时,也会加一个逗号,,以免你误解成数学计算意义上的括号。
tuple的定义还可以不用加括号,譬如如下:

>>> t='hello',
>>> len(t)
1
>>> t
('hello',)
>>> l='hello','word','aaa'
>>> len(l)
3
>>> l
('hello', 'word', 'aaa')

tuple内部是可以包含tuple或者其他譬如list等,不同在于如内含list,则这个list是可以被改变的;

>>> t = ('a', 'b', ['A', 'B'])
>>> t[2][0] = 'X'
>>> t[2][1] = 'Y'
>>> t
('a', 'b', ['X', 'Y'])

原因在于在元组中,每个元素都有一个地址,而这个列表也是指向的一个地址,改变元素只是改变内容,但是元组t指定的列表的地址并未改变,如下所示:
改之前:
之前
改之后:
改之后

参考资料:

https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/0014316724772904521142196b74a3f8abf93d8e97c6ee6000
http://www.runoob.com/manual/pythontutorial/docs/html/datastructures.html#tut-tuples

猜你喜欢

转载自blog.csdn.net/df0128/article/details/83897909