慕課網《Python 入門》學習筆記
1、tuple特性
tuple是另一種有序的列表,中文翻譯為“ 元組 ”。tuple 和 list 非常類似,但是,tuple一旦建立完畢,就不能修改了。
>>> t = ('Adam', 'Lisa', 'Bart')
建立tuple和建立list唯一不同之處是用( )
替代了[ ]
。
現在,這個 t
就不能改變了,tuple沒有 append()方法,也沒有insert()和pop()方法。所以,新元素沒法直接往 tuple 中新增,在 tuple刪除元素 也不行。
獲取 tuple 元素的方式和 list 是一模一樣的,可以正常使用 t[0],t[-1]等索引方式訪問元素,但是不能賦值成別的元素。
>>> t[0] = 'Paul'
Traceback (most recent call last):
File "", line 1, in
TypeError: 'tuple' object does not support item assignment
2、建立單元素tuple
包含 0 個元素的 tuple,也就是空tuple,直接用 ()表示:
>>> t = ()
>>> print t
()
建立包含1個元素的 tuple 呢?來試試:
>>> t = (1)
>>> print t
1
因為()
既可以表示tuple,又可以作為括號表示運算時的優先順序,結果 (1) 被Python直譯器計算出結果 1,導致我們得到的不是tuple,而是整數 1。
正是因為用()定義單元素的tuple有歧義,所以 Python 規定,單元素 tuple 要多加一個逗號“,”,這樣就避免了歧義:
>>> t = (1,)
>>> print t
(1,)
Python在列印單元素tuple時,也自動新增了一個“,”,為了更明確地告訴你這是一個tuple。
3、"可變”的tuple
tuple也是“可變”的,如:
>>> t = ('a', 'b', ['A', 'B'])
注意到 t 有 3 個元素:'a','b'和一個list:['A', 'B']。list作為一個整體是tuple的第3個元素。list物件可以通過 t[2] 拿到:
>>> L = t[2]
然後,我們把list的兩個元素改一改:
>>> L[0] = 'X'
>>> L[1] = 'Y'
再看看tuple的內容:
>>> print t
('a', 'b', ['X', 'Y'])
表面上看,tuple的元素確實變了,但其實變的不是 tuple 的元素,而是list的元素。
tuple一開始指向的list並沒有改成別的list,所以,tuple所謂的“不變”是說,tuple的每個元素,指向永遠不變。即指向'a',就不能改成指向'b',指向一個list,就不能改成指向其他物件,但指向的這個list本身是可變的!
理解了“指向不變”後,要建立一個內容也不變的tuple怎麼做?那就必須保證tuple的每一個元素本身也不能變。