DEV Community 日本語 フォロー Pythonのメモリモデルはあなたが思っているものではない Pythonの変数は、値のコンテナではなく、オブジェクトへの正確な名前バインディングです。この区別は、ミューテーション、関数引数、エイリアシングを理解する上で非常に重要です。一般的な「箱」の比喩とは異なり、Pythonの名前は単にメモリ内に独立して存在するオブジェクトに付けられたラベルです。複数の名前が重複を作成せずに同じオブジェクトを指すことができます。代入は新しいバインディングを作成し、名前が参照するオブジェクトを効果的に変更します。ミューテーションは、既存の名前が指しているオブジェクトを変更し、その同じオブジェクトを参照する他のすべての名前に影響を与えます。リストのようなミュータブル型での拡張代入も、オブジェクトをインプレースでミューテートします。しかし、整数のようなイミュータブル型での拡張代入は、名前を新しいオブジェクトに再バインドします。この動作は、データが関数にどのように渡され、関数によってどのように変更されるかに大きく影響します。関数内で新しいオブジェクトを作成することと、既存のオブジェクトをミューテートすることの違いは、元の変数に対して異なる結果をもたらします。このモデルを理解することは、特にデフォルトの関数引数のような複雑なシナリオで、コードの動作を正確に予測するために不可欠です。デフォルトの引数 [] は、定義時に単一のリストオブジェクトを作成し、それが呼び出し間でミューテートされます。このメンタルモデルを正確に適用するには、コードトレース演習を実践することが推奨されます。 Python's Memory Model Is Not What You Think It Is dev.to DEV Community 日本語 RSS thenote.app
[]は、定義時に単一のリストオブジェクトを作成し、それが呼び出し間でミューテートされます。このメンタルモデルを正確に適用するには、コードトレース演習を実践することが推奨されます。