ホームページ > バックエンド開発 > Python チュートリアル > Python は値渡しまたは参照渡しですか?また、参照渡しの動作を実現するにはどうすればよいですか?

Python は値渡しまたは参照渡しですか?また、参照渡しの動作を実現するにはどうすればよいですか?

Mary-Kate Olsen
リリース: 2024-12-26 05:05:11
オリジナル
340 人が閲覧しました

Is Python Pass-by-Value or Pass-by-Reference, and How Can I Achieve Pass-by-Reference Behavior?

Python で変数を参照によって渡す

テスト用のクラスを作成しているときに、Python のパラメーターが参照ではなく値によって渡されるように見えることに気づきました。この記事では、あなたの仮定が正しいかどうかを明らかにし、Python での参照渡しの実装について説明します。

値渡しと参照について理解する

Python では、引数は参照によって渡されます。これは、オブジェクトへの参照が関数に渡されることを意味します。ただし、この参照は値によって渡されます。この動作は、可変データ型と不変データ型の区別により発生します。

可変データ型と不変データ型

  • 可変データ型: これらのデータ型は変更できます。所定の位置にあります。例には、リスト、辞書、ユーザー定義オブジェクトなどがあります。関数内でこれらの型を変更すると、元のオブジェクトの変更が反映されます。
  • 不変のデータ型: これらのデータ型は、その場で変更できません。文字列、整数、およびタプルがこのカテゴリに分類されます。これらの型を変更しても、元のオブジェクトには影響しません。

可変リストの例

次の例を考えてみましょう。

def try_to_change_list_contents(the_list):
    the_list.append('four')

outer_list = ['one', 'two', 'three']
try_to_change_list_contents(outer_list)
print(outer_list)
ログイン後にコピー

リストは可変であるため、 the_list パラメータは、outer_list オブジェクトへの参照です。 the_list に「four」を追加すると、outer_list も変更されます。

不変文字列を使用した例

対照的に、文字列を使用したこの例を考えてみましょう。

def try_to_change_string(my_string):
    my_string = 'Changed'

outer_string = 'Original'
try_to_change_string(outer_string)
print(outer_string)
ログイン後にコピー

変更にもかかわらず関数内の my_string 変数、outer_string は変更されません。これは、文字列が不変であり、その場で変更できないために発生します。

Python での参照による受け渡し

元の変数が変更される参照による受け渡しを模倣するには、いくつかのオプションがあります。 :

1.新しい値を返す: 関数は新しい値を返すことができ、その値を関数の外の元の変数に割り当てることができます。

2.オブジェクトの属性の変更: 変数がオブジェクトの場合、関数はその属性の 1 つを変更でき、それが元のオブジェクトに反映されます。

3.リストまたはラッパーの使用: 変数をリストでラップし、そのリストを関数に渡すことができます。リストを変更すると、元の変数に影響します。

値渡しと参照のメカニズムを理解することで、Python で変数を必要に応じて効果的に変更できます。

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

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