スライスによるコピー
次のコードを実行したときの出力として、正しいものを1つ選べ。
a = [1, 2, 3]
b = a[:]
b.append(4)
print(a, a is b)
- A
[1, 2, 3] False - B
[1, 2, 3, 4] True - C
[1, 2, 3, 4] False - D
[1, 2, 3] True
正解と解説を見る
正解:A
a[:] や a.copy() は、浅いコピーを作る。b = a は、同じオブジェクトへの別名で、コピーではない。
| 順 | 実行する行 | 実行後の変数 |
|---|---|---|
| 1 | `a = [1, 2, 3]` | a = [1, 2, 3] |
| 2 | `b = a[:]` | b = [1, 2, 3], a = [1, 2, 3] |
| 3 | `b.append(4)` | b = [1, 2, 3, 4] |
| 4 | `print(a, a is b)` | a = [1, 2, 3], b = [1, 2, 3, 4] |
| 結果 | 実際の出力 | [1, 2, 3] False |
- A
正しい。スライスは新しいリストを作る(浅いコピー)。別のオブジェクトなので、
aは変わらない。 - B
誤り。
b = aの場合の挙動。 - C
誤り。コピーなので、
aは変更されない。 - D
誤り。別のオブジェクト。
このサイトの問題は、各試験の公式に示された出題範囲に沿って作ったオリジナルの模擬問題です。本試験の問題ではありません。一般社団法人Pythonエンジニア育成推進協会の公式サービスではありません。