ホームページ >バックエンド開発 >Python チュートリアル >Python の代入渡しは可変型と不変型にどのような影響を与えるのでしょうか?

Python の代入渡しは可変型と不変型にどのような影響を与えるのでしょうか?

Susan Sarandon
Susan Sarandonオリジナル
2025-01-01 02:49:10358ブラウズ

How Does Python's Pass-by-Assignment Impact Mutable and Immutable Types?

参照渡し vs. 値渡し

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」を変更しても、元の「変数」には影響しません。

不変型の参照渡しの実現

不変型の参照渡しの動作を実現するには、次のようにします。新しい値を返す、またはラッパーを使用するなどの手法が使用される場合があります。

Returning a New値:

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。