農會 資訊管理類程式設計110 年第 44 題單選題
以下為Python程式,請問a的結果為何?
def swap(a):
b=a[1]
a[1]=a[2]
a[2]=b
a=[1,2,3]
swap(a)
A[1, 2, 3]
B[2, 1, 3]
C[1, 3, 2]正確答案
D[3, 2, 1]
C正確答案
Python串列為可變物件,傳入函式修改元素會直接改變原物件,本題交換索引1與2的值。
為什麼答案是 C
正確理解串列為可變物件(Mutable),且索引 1 與 2 的值(2和3)在函式內成功互換。
考點:傳值與傳參考考點:索引起始值考點:可變物件特性考點:串列操作混淆
載入中…
完整詳解
Pro · 無限重點 Python串列為可變物件,傳入函式修改元素會直接改變原物件,本題交換索引1與2的值。
串列(List)是 mutable!傳入函式修改內容不需 return,原變數 a 的索引 1 和 2 互換,秒選 [1, 3, 2]。
逐選項分析
A傳值與傳參考✕ 陷阱
誤以為引數傳遞是傳值(Call by Value),認為函式內的修改不會影響外部原串列。
B索引起始值✕
誤以為交換的是索引 0 和 1 的元素,或是對 Python 索引從 0 開始計算的規則不熟悉。
C可變物件特性✓ 正確
正確理解串列為可變物件(Mutable),且索引 1 與 2 的值(2和3)在函式內成功互換。
D串列操作混淆✕
誤以為函式會將整個串列順序反轉,或是混淆了切片(Slice)與單一索引賦值的操作。
Python 常見資料型別可變性對照
| 型別 | 可變性(Mutable) | 傳入函式修改的影響 |
|---|
| List (串列) | 可變 (Mutable) | 直接修改原物件 |
| Dictionary (字典) | 可變 (Mutable) | 直接修改原物件 |
| Tuple (元組) | 不可變 (Immutable) | 無法修改,會報錯或產生新物件 |
| String (字串) | 不可變 (Immutable) | 無法修改,會報錯或產生新物件 |
初學者常受其他語言影響,誤以為所有變數傳入函式都是「傳值」,忘記 Python 的 List 是傳物件參考。在函式內修改 List 元素,外部原變數也會跟著改變,不需 return。