pythonのパラメーター受け渡しがどのように実行されるかを分析する前に、python変数と割り当ての基本原則を理解する必要があります。これは、パラメーター受け渡しをよりよく理解するのに役立ちます。
Python変数と割り当て
数行のコードから始めます
In [1]: a =1
In [2]: b = a
In [3]: a = a +1
最初に1をaに割り当てます。つまり、ポイントはオブジェクト1を指し、すべてがpythonのオブジェクトです。次に、b = aです。これは、bもオブジェクト1を指すことを意味します。pythonでは、オブジェクトは複数の参照によって指すことができます。最後に実行されたa = a + 1では、ここで1つのポイントに注意する必要があります.int、str、その他の不変タイプなどのpythonのデータタイプでは、a = a + 1を実行しても、aが指すオブジェクトの値は1増加しません。代わりに、新しいオブジェクト2を作成し、オブジェクト2を指すようにします。元のオブジェクトはまだメモリに存在します。それからここの言葉はまだ指摘されています、それぞれaとbの値を見てみましょう:
In [4]: a
Out[4]:2
In [5]: b
Out[5]:1
この例を通して、ここでaとbは、最初に同じオブジェクトを指す2つの変数であることがわかります。または、同じオブジェクトの2つの名前として想像することもできます。 b = aの単純な割り当ては、新しいオブジェクトが再作成されることを意味するのではなく、同じオブジェクトが複数の変数によってポイントまたは参照されることを意味します。同時に、同じオブジェクトを指すことは、2つの変数が一緒にバインドされることを意味しません。変数の1つを再割り当てしても、他の変数の値には影響しません。
リストの例もあります。もう一度見てみましょう。
In [6]: l1 =[3,4,5,6]
In [7]: l2 = l1
In [10]: l1.append(7)
In [11]: l1
Out[11]:[3,4,5,6,7]
In [12]: l2
Out[12]:[3,4,5,6,7]
コードでは、2つの変数l1とl2がオブジェクト[3,4,5,6]を指すようにします。リストは変数データ構造であることがわかっているため、追加操作では新しいオブジェクトは生成されません。最後に要素を追加するだけで[3、4、5、6、7]になります。l1とl2は同時にこのリストを指すため、リストの変更は変数l1とl2の両方に同時に反映されます。 、l1とl2の値は同時に[3、4、5、6、7]になります。
pythonの変数は削除できますが、オブジェクトは削除できません
In [22]: a =[1,4,5]
In [23]: del a
delステートメントが変数aを削除すると、aを介して[1,4,5]にアクセスすることはできませんが、このオブジェクトはまだ存在しており、Pythonのガベージコレクションメカニズムは参照が0であることを検出し、再利用されます。
変数は削除できますが、オブジェクトは削除できません
python関数はどのようにパラメーターを渡しますか
Pythonのパラメータ転送は、割り当て転送または参照転送です。Pythonのすべてがオブジェクトであるため、パラメータを渡すときは、新しい変数と元の変数が同じオブジェクトを指すようにします。例を見てみましょう。
In [28]: def func(b):...: b =2
In [29]: a =1
In [30]:func(a)
In [31]: a
Out[31]:1
ここで渡すパラメーターは、変数aとbが同時にオブジェクト1を指すようにします。しかし、b = 2で実行すると、システムは値2の新しいオブジェクトを再作成し、bがそれを指すようにし、それでもオブジェクト1を指します。したがって、aの値は変更されず、1のままになります。
の値を変更するにはどうすればよいですか?
関数でbを返すことができます
def func(b):
b =2return b
a =1
a =func(a)
a
2
上記の例では、int型であるため、リストの例を見てみましょう。
def func(l2):
l2.append(77)
l1 =[12,3,6]func(l1)
l1
[12,3,6,77]
ここで、l1とl2は、最初に値[1、2、3]のリストを同時に指します。ただし、リストは可変であるため、append()関数が実行され、新しい要素4が最後に追加されると、変数l1とl2の値も変更されます。
次に、誰もが次の例を見て、結果はどうなりますか?
def func(l2):
l2 = l2 +[4]
l1 =[12,3,6]func(l1)
l1
[12,3,6]
ご覧のとおり、l1 + [4]の操作は、要素4が最後に追加された新しいリストが作成され、l2がこの新しいオブジェクトを指し、l1が元のオブジェクトを指すため、l1は変更されていません。
総括する
今日は、Python変数の基本原則とその割り当てについて説明し、Pythonでパラメーターがどのように渡されるかを説明しました。他の言語とは異なり、Pythonで渡されるパラメーターは、値や参照ではなく、割り当てによって、または参照によってオブジェクトと呼ばれます。ここでの割り当てまたはオブジェクト参照の転送は、特定のメモリアドレスではなく、特定のオブジェクトを指していることに注意してください。
上記は、pythonのパラメータ受け渡し方法の詳細な内容です。pythonのパラメータ受け渡し方法の詳細については、ZaLou.Cnの他の関連記事に注意してください。
Recommended Posts