学習手法、極小再現、および予測-実験-振り返りの実践
前提条件
高校レベルの読解力とターミナル操作の基礎知識。高度な Python 構文の事前知識は不要です。
学習目標
既存のミューテーション・トレーサー教材で、診断セルフチェックと「予測-実験-振り返り」ループを実践する:コード実行前に予測結果を記録し、実行後に差異を分析し、極小再現例(MRE)と根本原因仮説を導出したうえで、概念を名前・オブジェクト・ミューテーション・割り当て・証拠に分解する。
手順
プログラミングやモデルのデバッグにおいて、推測の繰り返しや無秩序なプロンプト入力は根本的な理解不足を覆い隠してしまいます。本アクティビティでは、変数の可変性と参照に関する典型的な課題を対象に、「予測-実験-振り返り」のサイクルを実践します。
演習と予測記録
以下の Python コードを観察し、実行する前に下部の入力欄に予想される出力を記述してください:
a = [1, 2, 3]
b = a
b.append(4)
c = a + [5]
print('Case 1:', a)
print('Case 2:', c)
print('Case 3:', a is b, a is c)
予測完了後、なぜ b.append(4) は a を変更し、a + [5] は a を変更しないのかを分析してください。さらに極小再現例(MRE)として、b と a が同一オブジェクトを参照していることを示す短い証人スニペットを記述してください。これは予期せぬ挙動への対処だけでなく、同一性の主張を裏付ける証拠なので、予測がすべて正しくても必須です。
ヒント:Python において変数名はメモリ上のオブジェクトへの参照です。b = a はリストの新しいコピーを作成するのではなく、同じオブジェクトに別の名前を割り当てます。.append() はインプレース(破壊的)変更ですが、+ 演算子は新しいリストを割り当てて返します。
模範解答および実行トレース:
1. 予測出力:
Case 1: [1, 2, 3, 4]
Case 2: [1, 2, 3, 4, 5]
Case 3: True False
2. 根本原因の分析:
- b = a により a と b は同一のオブジェクトを参照します(id(a) == id(b))。b.append(4) による変更は同じリストに反映されるため、a の内容も更新されます。
- a + [5] は新しいリストオブジェクトを割り当てて c にバインドします。したがって a is c は False となり、a 自体は不変のまま保たれます。
3. 極小再現例 (MRE):
x = []
y = x
y.append(1)
assert x == [1] and x is y # 破壊的変更が共有参照に波及する
Day 01 客観的診断クイズ: オブジェクト参照とインプレース変更
以下の設問に解答して理解度を確認してください。提出前に利用した補助条件を誠実に申告してください。
コード a = [1, 2, 3]; b = a; b.append(4) を実行した後の a の最終的な値は何ですか?
b = a は b と a を同一のリストオブジェクトに紐付けます。b.append(4) はそのオブジェクトをインプレースで変更するため、a も [1, 2, 3, 4] となります。
Pythonにおいて変数代入は識別子を既存オブジェクトに束縛する処理であり、コピーを作成しません。
続けて c = a + [5] を実行した場合、式 a is c の評価結果はどうなりますか?
a + [5] は新しいリストオブジェクトを生成して返します。is 演算子は2つの名前が同一のオブジェクトを参照しているか(id(a) == id(c) が成り立つか)を検証するため、結果は False となります。
リストの + 結合演算は既存のリストを変更せず、新しいリストオブジェクトを割り当てて返します。
Pythonにおける代入文 b = a の基礎メカニズムとして正確な説明はどれですか?
Pythonの変数はオブジェクトを指す名前付き参照です。代入は新しい名前 b を a が指す既存のオブジェクトに束縛するだけです。
参照セマンティクスと値コピーの区別を意識してください。
解答根拠と履歴
学習プロジェクト提出と証拠
注意:貼り付けられた実行ログやメモは自己申告の証拠であり、独立した検証や自動テスト結果を構成するものではありません。
習得基準:外部AIの補助に頼ることなく、破壊的変更と新規割り当ての違いを正確に予測し、予測・実測・原因究明を含む3段階の診断ログに加え、極小の同一性/ミューテーション証人スニペット(MRE)を自力で記述できること。MREは予測結果に関わらず必須とする。
公式ソースリソースと権利証跡
Pythonデータモデルとミュータビリティ公式リファレンス
該当セクション・タイムスタンプ: 第3.1節および第3.2節(オブジェクト、値、型)
検証バージョンと日付: Python 3.12 公式ドキュメント(検証日: 2026-10-30)
Pythonのオブジェクト同一性、参照、ミュータブル/イミュータブルに関する厳密な公式仕様であり、不正確な二次解説を排除するため選定。
基本的なターミナル操作の基礎知識および高校レベルの読解力
外部接続が遮断された場合でも、ローカルの pydoc および本教材内の完全な解説・演習コードによりオフラインで学習を完結できます。
比較対象候補リソースと選定評価 (4)
計算論的思考の講義として優れているが、即時の最小再現コード(MRE)検証よりも伝統的な講義進行に重点があるため見送り。
言語モデルのスクラッチ実装において卓越した深度を持つが、PyTorchとGPU環境を前提とするためDay 30-60へ延期。
幾何学的直観に秀でており、Day 10-18の数学基礎で採用。Day 01の参照学習には含めず。
自動微分の実装解説として最適。コードはMITライセンスだが動画字幕の再配布権が不明なため全文翻訳インポートは禁止し、Day 19-25にて合法リンクとして活用。
オプション動画リソース(利用不能でも学習は遮断されません)
注記:外部のオプション動画リソースは利用不可です。教材本文、自律演習、ヒント、習得基準は完全なオフライン環境で動作します。