テスト用のクラスを作成しているときに、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 は変更されません。これは、文字列が不変であり、その場で変更できないために発生します。
元の変数が変更される参照による受け渡しを模倣するには、いくつかのオプションがあります。 :
1.新しい値を返す: 関数は新しい値を返すことができ、その値を関数の外の元の変数に割り当てることができます。
2.オブジェクトの属性の変更: 変数がオブジェクトの場合、関数はその属性の 1 つを変更でき、それが元のオブジェクトに反映されます。
3.リストまたはラッパーの使用: 変数をリストでラップし、そのリストを関数に渡すことができます。リストを変更すると、元の変数に影響します。
値渡しと参照のメカニズムを理解することで、Python で変数を必要に応じて効果的に変更できます。
以上がPython は値渡しまたは参照渡しですか?また、参照渡しの動作を実現するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。