國中教甄|資訊科技資訊科技114 年第 56 題單選題
以下Python程式碼的輸出結果為何? def S56O(): x = [1, 2, 3] y = x[:] def S56I(): nonlocal x 試題公告 y[0] = 4 x[2] += y[0] S56I() return x print(S56O())
A[1, 2, 3]
B[1, 2, 7]正確答案
C[4, 2, 3]
D[4, 2, 7]
B正確答案
若將誤植的試題公告還原為合法程式碼,y 是 x 的複製串列,S56I 只把 y[0] 改成 4,並讓 x[2] 加上 4,最終 x 為 [1, 2, 7],故選 B。
逐選項解析
A[1, 2, 3]✕ 錯誤
此選項假設內部函式沒有改變 x。但依命題意旨還原為合法程式碼後,S56I 內會執行 x[2] += y[0],使 x[2] 從 3 變成 7,因此不會仍是 [1, 2, 3]。若嚴格按字面插入試題公告執行,也會因語法錯誤而不會輸出此結果。
B[1, 2, 7]✓ 正確
依命題意旨將試題公告視為誤植文字並還原為合法程式碼後,x = [1, 2, 3],y = x[:] 產生新的串列物件。S56I 中 y[0] = 4 只改變 y,接著 x[2] += y[0] 使 x[2] = 3 + 4 = 7,因此回傳 [1, 2, 7]。
C[4, 2, 3]✕ 易錯陷阱
此選項誤以為 y = x[:] 會讓 y 與 x 完全共用同一串列,或以為 y[0] = 4 會同步改變 x[0]。實際上 x[:] 是複製出新的串列物件,y[0] = 4 只會改變 y,不會改變 x[0]。
D[4, 2, 7]✕ 易錯陷阱
此選項同時誤以為 x[0] 會變成 4,且 x[2] 會變成 7。還原後的合法執行結果只有 x[2] 受影響,x[0] 仍為 1,因此不是 [4, 2, 7]。
立即註冊,看進階詳解與知識整理
這題的進階詳解與知識整理,註冊就能看 · 每天 2 題免費
精選詳解- 秒殺解題技巧與破題關鍵
- 關鍵知識表整理
- 陷阱與易錯提醒
- 同考點歷屆題庫連續刷題與錯題本