iT邦幫忙

5

【Python 超入門】(13)資料型別tuple,可變與不可變物件介紹- 老闆,我的便當可不可以飯少、蛋不要蛋白,茄子換豆干勒?

嗨,大家好久不見,
小馬來分享初學友善教學啦(重出江湖?)

繼去年的系列文【Python 超入門】<心原一馬從零開始教你打程式> (1)~(11) 統整 #毛遂自薦能夠快速入門python的好教材
以非常生活化、生動的方式教學撰文,
效果似乎還不錯,
然而只教到python最基礎的概念即停止了

我想能否延續這個精神,
同樣以非常淺白、生活化的教學繼續往下寫呢?
用最口語的方式,幫助有心想學python的人入門,
所以再次出【Python 超入門】的續集

我想這個故事可以很直覺的理解本文要講的可變與不可變物件:

某人到便當店買便當,今日特餐: 排骨便當,附小菜:「茄子、炒蛋」
某人: 「老闆我要飯少、蛋不要蛋白、茄子換豆干」
「好,沒問題」-> 可變物件
「不好意思,便當內容物是固定的,不能替換哦」 -> 不可變物件

資料型別- tuple介紹

【Python 超入門】(4) 變數型態-list: 能納百物的百寶袋一文中呢,
我們教過了list這個變數型態,
list用來收納變數,由於能納百物的百寶袋

今天要介紹的tuple跟list也非常相似,
以下進基礎語法教學:

(複習)宣告一個列表(list)

建立列表(list)時,必須把資料用中括號[]圍起來,用逗號,把資料隔開,
例如我們宣告一個變數pocket表示多啦a夢的口袋,裡面裝著特別的道具:

pocket = ['任意門', '縮小燈', '時光機'] 

宣告一個元組(tuple)

宣告元組的方式跟列表(list)大同小異,只是差在元組改成用小括號

pocket = ('任意門', '縮小燈', '時光機')

這邊需特別注意,如果元組只有唯一一個元素,
宣告時必須在元素後面加上逗號,例如:

pocket = ('任意門', )

除此之外,元組和list的用法幾乎一樣,
譬如說你要取得元素內的資料,
一樣在列表名稱後面加上中括號[]
裡面填入位置編號(一樣請記得編號從0開始數),即可取出資料值,例如:

pocket = ('任意門', '縮小燈', '時光機')
print(pocket[0])
print(pocket[1])
print(pocket[2])

結果:
任意門
縮小燈
時光機

列表可變,元組不可變

tuple與list的差別在tuple是不可變物件,一旦宣告之後是不能改變裡面的內容的,
而list是可變物件,宣告之後可以改變裡面的內容
例如:

list_students = ['Alice', 'Bob', 'Cindy', 'Daisy', 'Eve', 'Fairy'] 
list_students[0] = 'Ade' # OK, 列表可以修改元素
tuple_students = ('Alice', 'Bob', 'Cindy', 'Daisy', 'Eve', 'Fairy')
tuple_students[0] = 'Ade' # NG, 元素元素不可變

執行至第四行時,程式會報錯:TypeError: 'tuple' object does not support item assignment

可變與不可變物件

在python中,還有哪些資料型別是可變物件,哪些是不可變物件呢?
列舉如下:

  • 可變物件: list(列表), set(集合), dict(字典) (set, dict預期在後面的課程會解說)
  • 不可變物件: int(整數), float(浮點數), 字串(str), tuple(元組)

寫到這邊的時候,可能有人要困惑了,
宣告一個整數型變數的時候,
我們可以對整數做加減乘除,
可以改整數的值,
怎麼會說整數「不可變」呢?

這邊要釋疑一下,
所謂的「不可變」,
指的並非是無法將變數重新用等號賦值
而是無法改變數裡面的內容物

變數你要怎麼給值都是可以的
比如說:

x = 5
x = 3.14
x = [1,2,3]
x = '小狗'

你可以高興把x叫作5,把x叫作3.14,甚至叫個字串'小貓小狗'都可以。

所謂「不可變」指的是不可替換物件內部的內容物,
譬如說

x = (1,2,3)
x[0] = 4 # 程式會報錯, 因為tuple不可變
y = 'python'
y[0] = 'c' # 程式會報錯, 因為string不可變

但是如果這樣寫是OK的:

x = (1,2,3)
x = (4,2,3) # OK, 創建一個新物件叫(4,2,3),賦值給x

這有點像文章開始舉的例子,
我們說便當的內容物不可變,
指的是便當的配菜不能隨意調整之類的,
但是你可以不要排骨便當,換成雞腿便當的感覺

何時使用tuple(元組)?

tuple(元組),又稱為不可改變的list(列表),
你一定覺得很奇怪,
python為什麼要有類似功能但是功能卻受限的資料型態呢?
原因是元組有下列優點:

  • 更安全的保護資料
    有時候程式有一些資料不會改變的事實,例如影像處理中的物件的長寬、色彩資料(RGB)等,
    多以元組為資料類型
  • 增加程式執行速度
    tuple(元組)比list(列表)結構簡單,佔用系統資源較少,程式處理速度略快一些

未來寫程式時,若確定資料內容不必更改,就使用元組吧。
希望今天的課程對大家有幫助


尚未有邦友留言

立即登入留言