元組與列表:Python不可變數據類型怎麼用?區別在哪?

在Python中,列表(List)和元組(Tuple)是兩種常用的數據容器,它們長得很像,但用途和特性卻有很大不同。今天我們就來詳細聊聊它們的區別和使用場景,幫你搞清楚什麼時候該用列表,什麼時候該用元組。

一、列表和元組是什麼?

先把它們想象成“容器”——用來存放多個元素。比如你要記錄班級裏的學生名單,或者一週的天氣數據,都可以用這兩種容器。

  • 列表(List):用中括號 [] 定義,像“動態的購物清單”,你可以隨時添加、刪除或修改裏面的東西。
  • 元組(Tuple):用小括號 () 定義,像“寫好就不能改的合同”,創建後就不能再添加、刪除或修改元素(除非裏面有可變類型元素)。

二、怎麼創建列表和元組?

列表的創建

直接用中括號包裹元素,元素之間用逗號分隔:

# 空列表
empty_list = []

# 有元素的列表
fruits = ["蘋果", "香蕉", "橙子"]
numbers = [1, 2, 3, 4]
mixed = ["Python", 3.14, True]  # 列表可以存不同類型元素

元組的創建

直接用小括號包裹元素,同樣用逗號分隔:

# 空元組(較少用)
empty_tuple = ()

# 有元素的元組
days = ("週一", "週二", "週三")
scores = (90, 85, 95)
mixed = ("Python", 3.14, True)  # 元組也可以存不同類型元素

注意:如果元組只有一個元素,必須在元素後加逗號,否則會被識別爲普通變量類型!

single_list = [10]  # 這是列表,元素是10
single_tuple = (10)  # 這是整數類型,不是元組!
single_tuple = (10,)  # 這纔是元組,元素是10

三、核心區別:可變 vs 不可變

這是列表和元組最本質的區別:
- 列表是可變的(Mutable):創建後可以隨時修改裏面的元素,比如添加、刪除、替換。
- 元組是不可變的(Immutable):創建後不能直接修改元素,也不能添加或刪除元素(除非裏面的元素是可變類型,但整體結構不可變)。

列表的“可變”操作(舉例)

列表支持多種修改操作,比如:

# 1. 修改元素
fruits = ["蘋果", "香蕉", "橙子"]
fruits[0] = "草莓"  # 修改第一個元素
print(fruits)  # 輸出:['草莓', '香蕉', '橙子']

# 2. 添加元素(append)
fruits.append("葡萄")  # 在末尾添加
print(fruits)  # 輸出:['草莓', '香蕉', '橙子', '葡萄']

# 3. 刪除元素(pop)
fruits.pop(1)  # 刪除索引1的元素(香蕉)
print(fruits)  # 輸出:['草莓', '橙子', '葡萄']

元組的“不可變”操作(舉例)

嘗試對元組做列表的操作,會直接報錯:

# 1. 修改元素(報錯!)
days = ("週一", "週二", "週三")
days[0] = "星期日"  # 報錯:'tuple' object does not support item assignment
# 2. 添加元素(報錯!)
scores = (90, 85, 95)
scores.append(100)  # 報錯:'tuple' object has no attribute 'append'
# 3. 刪除元素(報錯!)
scores.pop(0)  # 報錯:'tuple' object has no attribute 'pop'

例外情況:如果元組裏的元素是列表(可變類型),可以修改這個列表元素:

t = (1, [2, 3], 4)
t[1].append(5)  # 修改元組裏的列表元素
print(t)  # 輸出:(1, [2, 3, 5], 4)

但這並不改變元組本身的結構(元素位置和數量沒變),只是修改了內部可變元素的內容。

四、什麼時候用列表?什麼時候用元組?

用列表的場景:

  • 數據需要頻繁修改(比如學生成績、購物清單、待辦事項)。
  • 數據長度不固定,需要動態添加或刪除元素。

例子

# 學生成績表(需要隨時更新分數)
scores = [90, 85, 95]
scores.append(88)  # 添加新成績
scores[1] = 80      # 修改第2個學生分數

用元組的場景:

  • 數據確定後不需要修改(比如一週的日期、配置信息、常量)。
  • 數據需要“只讀”保護(防止意外修改,比如系統配置)。
  • 元組作爲字典的鍵(因爲列表不可哈希,元組可以)。

例子

# 一週的日期(固定不變)
weekdays = ("週一", "週二", "週三", "週四", "週五", "週六", "週日")

# 配置信息(固定參數)
config = ("localhost", 8080, "admin", "123456")

五、總結:列表 vs 元組

對比項 列表(List) 元組(Tuple)
定義符號 [] ()
可變性 可變(可增刪改) 不可變(整體不可改)
元素類型 可包含任意類型(包括可變) 可包含任意類型(包括可變)
用途 動態數據(需修改) 靜態數據(無需修改)
安全性 容易被意外修改 不可被意外修改,更安全

一句話記住:列表是“靈活的購物清單”,元組是“固定的合同”。根據數據是否需要修改,選擇用列表還是元組就不會錯啦!

小夜