変更と再束縛のトレース
独立習得チェック — 評価対象の作業中に AI の支援は受けられません。支援を受けた場合は誠実に申告することが必須ですが、支援を受けた作業はあくまで復習扱いです。習得を主張する前に、新しい無支援チェックを完了してください。
前提条件
Day 04 の値と束縛のチェックを完了していること。短い Python ファイルを保存してターミナルから実行できること。
学習目標
append が 2 つの名前で共有されたリストを変更するのに対し、a = a + [2] は名前 a だけを再束縛する理由を、予測・実行・説明によって示す。
手順
必須作業:
1. 何も実行する前に、2 行の出力の予測を下書き欄に書く。
2. 演習のプログラムを trace.py として保存し、python trace.py を実行する。
3. 実際の出力をそのまま予測の横に写し、食い違いをすべて印で示す。
4. 各ケースについて、そのケースの 3 行目の後で a と b がどのリストオブジェクトを指しているかを 1〜2 文で説明する。
任意作業(必須の証拠がそろってからのみ):各ケースの後に print(id(a), id(b)) を加え、2 つの id が一致するのはケース 1 だけであることを確認する。
演習と予測記録
出力を予測してから実行してください:
a = [1]
b = a
a.append(2)
print("case 1:", a, b, a is b)
a = [1]
b = a
a = a + [2]
print("case 2:", a, b, a is b)
ケース 1 では b が変わるのに、ケース 2 では変わらないのはなぜですか?
a.append(2) は両方の名前が指すリストオブジェクトそのものを変更します。a + [2] はまったく新しいリストを作り、a = ... は名前 a だけをそれに向け直します。b は古いリストを指したままです。
出力(Python 3.13 と 3.14 で同一):
case 1: [1, 2] [1, 2] True
case 2: [1, 2] [1] False
解説:
- ケース 1:b = a により両方の名前が 1 つのリストを指します。append はそのリストをその場で変更するので、どちらの名前も [1, 2] を示し、a is b は True です。
- ケース 2:a + [2] は新しいリスト [1, 2] を作り、代入で a がそれに再束縛されます。b は元の [1] を指したままなので、a is b は False です。
原則:変更はオブジェクトそのものを変え、それを指すすべての名前に変化が見えます。再束縛は 1 つの名前が指すオブジェクトを切り替えるだけで、ほかの名前には影響しません。
客観的理解度チェックと診断トレース
以下の設問に解答して理解度を確認してください。提出前に利用した補助条件を誠実に申告してください。
a = [1]、b = a、a = a + [2] の順に実行した後、print(b) は何を表示しますか?
a + [2] は新しいリストを返し、代入は a だけをそれに向けます。b は元のリスト [1] を指したままです。b から変化が見えるのは、append のようなその場で変更する操作の場合だけです。
3 行目が既存のオブジェクトを変更するのか、新しいオブジェクトを作るのかを考えてください。
解答根拠と履歴
AI の支援なしで、実行前の予測、2 行の正確な出力、そして共有オブジェクトの変更(ケース 1)と 1 つの名前の新しいオブジェクトへの再束縛(ケース 2)を区別した正しい説明を記録していること。
公式ソースリソースと権利証跡
Python Standard Library: Built-in Types
該当セクション・タイムスタンプ: 対象節:真理値判定、比較、可変シーケンス型
検証バージョンと日付: Python 3.12 documentation (verified 2026-10-30)
真理値判定、比較、束縛、変更の動作を確認するための規範的な参照資料。
Day 03 の復習ドリル
掲載された Python の例を実行し、インストール済みインタープリタのヘルプを参照してください。
比較対象候補リソースと選定評価 (2)
式を扱う演習に必要な範囲よりも深いオブジェクトの意味論を扱う資料です。演算子レベルの内容に範囲を絞るため、stdtypes を選びました。
同じ演算子を解説する入門資料です。正式な仕様の参照元として、ライブラリリファレンスを選びました。
Git User Manual: Recording Changes
該当セクション・タイムスタンプ: リポジトリへの変更の記録の節
検証バージョンと日付: Verified 2026-10-30
安全にコミットする前に小さな差分を確認するための一次資料。
Git の基礎知識
ローカルで `git diff` と `git status` を使い、差分を理解するまではコミットしないでください。
比較対象候補リソースと選定評価 (2)
コマンドのオプションを調べるための資料です。コミット前に変更を確認する手順を案内する Pro Git の章を選びました。
読みやすい商用の解説です。同じ変更確認の習慣について、書籍の章はステージングとインデックスの意味をより深く説明しています。