変数は値のラベルです


ソース-Wikidocsのアップグレード

バインディング


ある値が頻繁に使用される場合、職業記憶というより、変数と呼ばれる値を参照するラベルです.
a = 3
上のコードで=バインディングを表します.バインドは、変数が値を指すことを意味します.
=がある場合は、まず右側を説明するので、上記のコードを実行すると、3という整数タイプのオブジェクトがメモリに割り当てられ、メモリに割り当てられたオブジェクトのアドレスがaの変数として指定されます.
=は各変数のアドレスです.まず右側に解釈し、3つの整数タイプのオブジェクトをメモリ->aに割り当てます.
id(変数)内蔵関数を使用して、3という名前のオブジェクトが割り当てられたアドレスをチェックできます.

参照数


Pythonでは、あるタイプのオブジェクトの値があります.整数はintタイプのオブジェクト、実数がfloatタイプのオブジェクトの例では、aという変数がintタイプのオブジェクト3をバインドし、intタイプのオブジェクト3がメモリに割り当てられ、変数aによってバインドされます.変数は、任意のオブジェクトをバインドすると、オブジェクトの参照カウント値が増加します.
a = 3
sys.getrefcount(a)
sys.getrefcount(3)
// 둘다 같은 값 나옴
>>> 324
上記のコードを実行すると、aバインドされたオブジェクト「3」の参照カウンタ値が画面に出力されます.価格が高いのは、Pythonでinterpreterを実行している間に、内部で3という値が何度も引用されているからです.
次に、bとcの2つの変数も3にバインドし、参照カウンタ値の変化を確認します.
b = 3
c = 3
sys.getrefcount(3)
>>> 326
既存の324に2の326が追加されていることが確認できます.これは,bとcもオブジェクト3をバインドしているため,2を増やした.
今回はリストオブジェクトに対して同じコードを実行します.
a = [0,1,2]
sys.getrefcount(a)
>>> 2
2が現れることを確認できます.sysモジュールのgetrefcount()関数を呼び出すと、オブジェクトが参照されるため、1の参照数が増加します.したがって、実際には、[0,1,2]という名前のリストオブジェクトのReferenceカウントを1と呼ぶことができる.

予算とGarbage Collection


Pythonでは、すべての値がクラスのインスタンスです.これを「オブジェクト」と呼び、オブジェクトが変数を参照するときに参照カウントを増やし、参照が解除されると参照カウントを減らします.オブジェクトのReferenceカウントが0の場合、そのオブジェクトに対するPython Interferメモリの割り当てが解除されます.この方式はCPythonのゴミ収集の基本メカニズムである.