ホームページ > バックエンド開発 > Python チュートリアル > Python は参照渡しと値渡しをどのように処理しますか?

Python は参照渡しと値渡しをどのように処理しますか?

Mary-Kate Olsen
リリース: 2024-12-25 01:29:10
オリジナル
355 人が閲覧しました

How Does Python Handle Pass-by-Reference and Pass-by-Value?

Python の参照渡し: 包括的な説明

Python では、引数を関数に渡すのは参照によって行われます。つまり、渡されるパラメータは参照です。実際のオブジェクト。ただし、値による参照の受け渡しと実際の参照による受け渡しの違いを理解することが重要です。

値による参照の受け渡し

Python では、パラメーターは値によって渡されます。これはコピーを意味します。オブジェクトの値が関数内のパラメータに割り当てられます。これには 2 つの意味があります:

  1. 可変オブジェクト: 渡されたオブジェクトが可変 (つまり、その内容を変更できる) の場合、関数内でオブジェクトに加えられた変更が反映されます。関数の外の元のオブジェクト内。これは、関数パラメータと元のオブジェクトの両方が、メモリ内の同じ基になるオブジェクトを参照しているためです。
  2. 不変オブジェクト: 不変オブジェクト (つまり、内容を変更できない) の場合、元のオブジェクト関数内からは変更できません。これは、関数のパラメータが元のオブジェクトのコピーであり、コピーに変更を加えても元のオブジェクトには影響しないためです。

Python での参照渡しのシミュレーション

真の参照渡しは Python では直接サポートされていませんが、それをシミュレートするいくつかの手法があります。

  1. 新しい値: 関数は、呼び出しコンテキスト内の元のオブジェクトを置き換える新しい値を返すことができます。厳密には参照渡しではありませんが、これにより元のオブジェクトを効果的に変更できます。
  2. ラッパーを使用する: ラッパー クラスまたはリストを使用して、オブジェクトを保持し、渡すことができます。参考までに。ラッパーはオブジェクト自体ではなく値によって渡されるため、関数内でオブジェクトに加えられた変更は元のオブジェクトに影響します。

例:

次のコードは渡しを示しています。 -可変 (リスト) と不変の参照(文字列):

# Mutable List
def modify_list(the_list):
    the_list.append('four')

outer_list = ['one', 'two', 'three']
print("Before: ", outer_list)
modify_list(outer_list)
print("After: ", outer_list)

# Immutable String
def modify_string(the_string):
    the_string = 'In a kingdom by the sea'

outer_string = 'It was many and many a year ago'
print("Before: ", outer_string)
modify_string(outer_string)
print("After: ", outer_string)
ログイン後にコピー

出力:

Before:  ['one', 'two', 'three']
After:  ['one', 'two', 'three', 'four']
Before:  It was many and many a year ago
After:  It was many and many a year ago
ログイン後にコピー

出力に見られるように、リストは正常に変更され (参照渡し)、文字列は変更されないままです (パス-値による)。

以上がPython は参照渡しと値渡しをどのように処理しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート