ホームページ >バックエンド開発 >Python チュートリアル >Python の代入渡しは可変型と不変型にどのような影響を与えるのでしょうか?
Python で変数を関数に渡す場合、引数は常に代入によって渡されます。これは、関数のパラメータが渡されるオブジェクトへの参照であることを意味します。
ただし、Python は可変型と不変型を区別するため、渡された変数の動作は異なります。
可変型:
可変型の場合、渡されたパラメータは渡されたのと同じオブジェクトを参照します。関数内のオブジェクトに加えられた変更
不変型:
不変型の場合、渡されるパラメーターは渡されたオブジェクトのコピーです。関数は外側のスコープには反映されません。
この Python について考えてみましょう。 class:
class PassByReference: def __init__(self): self.variable = 'Original' self.change(self.variable) print(self.variable) def change(self, var): var = 'Changed'
このクラスのインスタンスが作成されるとき:
PassByReference()
出力は「オリジナル」です。これは、「change」メソッドの「var」パラメータが外側のスコープの「variable」属性のコピーであるためです。したがって、メソッド内で「var」を変更しても、元の「変数」には影響しません。
不変型の参照渡しの動作を実現するには、次のようにします。新しい値を返す、またはラッパーを使用するなどの手法が使用される場合があります。
def change_immutable(parameter): new_parameter = 'Changed' return new_parameter result = change_immutable('Original')
この場合、「change_immutable」関数は新しい値を返し、それが「result」変数に割り当てられます。
class ImmutableWrapper: def __init__(self, value): self.value = value def change_immutable_wrapper(wrapper): wrapper.value = 'Changed' immutable_wrapper = ImmutableWrapper('Original') change_immutable_wrapper(immutable_wrapper) print(immutable_wrapper.value) # Outputs 'Changed'
このアプローチでは、不変の値を保持するためにオブジェクト ラッパーが使用されます。ラッパーの値に加えられた変更は、外側のスコープに反映されます。
以上がPython の代入渡しは可変型と不変型にどのような影響を与えるのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。