Pythonでの参照渡しと値の比較

Pass Reference Vs



Pythonを知った後、特に他の多くのコンピューター言語に精通している場合は、関数が予想どおりに引数をその場で変更しないインスタンスを見つけることができます。多くの言語は、メソッド引数を参照として使用します。これは、現在の変数への参照による受け渡しとして定義されます。 Pythonのメソッド引数の特定の処理方法を理解したい、高度なPython開発者の方は、このガイドが最適です。

Pythonはオブジェクト参照によるパスをサポートします

参照渡しと値渡しは、プログラミング言語間でパラメーターを渡すための最もよく認識され、簡単に理解できる2つの方法であることは間違いありません。悲しいことに、Pythonは「オブジェクト参照の受け渡し」であり、値による受け渡しでも参照による受け渡しでもありません。多くの場合、オブジェクト参照による呼び出しや共有による呼び出しと呼ばれます。参照渡しの技術的な詳細に飛び込むときに、概念をセグメントに分割することで、概念自体をより詳しく調べると便利です。







合格: これは、メソッドに引数を指定することを意味します。



参照による: これは、メソッドに移動する引数が、その変数の別のレプリカではなく、現在ストレージに存在する変数を参照していることを意味します。



メソッドに定義済み変数への参照を割り当てると、それに対応する変数は、この参照に対するすべての操作によって明示的に影響を受けます。ここで、実際にこれがどのように機能するかの例を考えてみましょう。この例では、変数 ‘を定義しました。 怒り' の値を持つ 4 。このシナリオ全体を通して、変数 ‘ 怒り' その場所で変更されていません。 Pythonは、現在の変数への参照ではなく、提供された引数を自己完結型の値として処理しているようです。





これは、参照ではなく、Pythonが引数を値で移動することを意味しますか? Pythonは引数を代入によって移動するため、参照によっても値によっても移動しません。このためのロジックは2つあります。



現在、渡されるパラメータはオブジェクトへのポインタです。特定のタイプのデータは変更可能であり、一部は変更可能ではありません。

変更可能なオブジェクトを関数に移動すると、関数はまったく同じオブジェクトへの参照を取得するため、すべてを自分の魂が満足するように変更できます。ただし、関数で参照に再度参加するまで、外部スコープは何も知りません。終了すると、外部リファレンスは実際のオブジェクトのみを対象とします。不変オブジェクトを関数に移動した場合、外部参照が常に再結合されるとは限らず、オブジェクトを単に変更することはできません。物事をより簡単にするために、1つずつ理解しましょう。

参照渡し

まず、変数「mylist」自体はリストではなく、値を持つリストを参照していることを理解する必要があります。変数「mylist」は、その中に値を持つコンテナと呼ぶことができます。リスト値はオブジェクトです。 「mylist」変数は、その内容とともに関数に直接配信されています。

以下のコード例では、リストと私のリストの両方が同じストレージ変数であるように見えるため、まったく同じストレージオブジェクトに適用されます。そのため、出力時に「Saeed」と出力されます。

変数またはエンティティに対して実行されたアクションはすべて、呼び出し元のメソッドにすぐにミラーリングされます。このメソッドは、変数の値を完全に変更し、それを完全に別個のオブジェクトに向けることができます。関数「set_list」でわかるように、リストの内容を変更し、要素「Aqsa」を含むまったく新しいリストを出力しました。これは、変更されたリストを返し、呼び出し元と同じ行に出力したためです。

このメソッドは、以下と同じ結果を得るために変数の要素を再割り当てする場合もあります。リストに新しい値が追加され、変更が反映されていることがわかります。リストに一意の文字列を追加して、呼び出し元に返しました。結論として、メソッドと呼び出し元は、パスバイ関係全体で同じ変数とオブジェクトを使用しています。

値渡し

値渡しにより、メソッドには、呼び出し元が割り当てた引数オブジェクトの複製が提供されます。これにより、元のアイテムは変更されず、行われたすべての変更が同じオブジェクトのレプリカ内の別々のメモリ位置に保持されます。

これは、メソッドによって変数またはエンティティに対して実行されるすべての操作で等しく有効です。呼び出し元メソッドのスコープ内の変数とオブジェクトの重複は、それらを要約するために完全に分離されています。

参照によるオブジェクトの受け渡し

この状況全体を通して、Pythonは別個のものであるため、Pythonのメソッドは、呼び出し元が参照するのと非常によく似たオブジェクト参照をストレージ内で取得します。逆に、この手法では変数「mylist」(コンテナ)は取得されません。呼び出し元のメソッドは同じオブジェクトを格納します。このメソッドは、値渡しの場合と同様に、コンテナを生成し、それ自体のまったく新しいインデックスを生成します。

呼び出し元とメソッドはストレージ内の同じオブジェクトについて話しますが、追加されたメソッドが外部アイテムをリストに適用すると、呼び出し元エンティティが変更されます。複数のラベルがありますが、同じものです。両方の変数は非常によく似たオブジェクトを保持します。それが、物体の動きとの関係の背後にある感覚です。ストレージでは、メソッドと呼び出し元は同様のオブジェクトを使用しますが、複数の変数を介してそれらをキャッチします。呼び出し元変数(コンテナー)は、メソッド変数(コンテナー)に加えられた変更によって変更されません。データまたはコンテンツのみが変更されます。

結論

Pythonは、参照または引数の値による移動を受け入れる言語から独立して動作します。メソッド引数は、メソッドに転送される各値に割り当てられたローカル変数です。しかし、それでも、プロキシによって引数を移動しながら、他の言語で見られるのと同じ結果を得ることができます。