【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