Pythonのメモリメカニズム
Python のすべてはオブジェクトであり、単なる話ではありません。
1. 予備知識:
id()
:() は、メモリ内の現在のオブジェクトのアドレスを返すid
C 言語と同じように理解できます。*
int p = id(object) # id函数返回对象object在其生命周期内位于内存中的地址,id函数的参数类型是一个对象
2. すべてはオブジェクトです
Python の概念は、すべてがオブジェクトであるということです。したがって、Python 言語では、すべての「要素」は Python のオブジェクトと見なされます。
C言語で考えるとxとyは別のアドレスになるはずです。
しかし、Python ではすべてがオブジェクトなので、3
オブジェクトです。x と y は両方とも同じobjectを指している3
ため、x と y のメモリは同じです。
3. = の役割
C 言語の考え方に従えば、x は単なる代入であり、x を 2 回出力すると同じアドレスになるはずです。
しかし、Python ではすべてがオブジェクトです。x=x+y
は 2 つのオブジェクトの加算です。x+y
等号の右側にある 2 つのオブジェクトが加算されて新しいオブジェクトが形成され、新しいオブジェクトは変数名 x に割り当てられます。前のオブジェクト x は、変数名がなかったため破棄されました。参考です。したがって、2 回出力される x のアドレスは異なります。
4.「破壊」を避ける
Python のほとんどのオブジェクトでは、これを使用してオブジェクトのメモリを直接割り当てることが切片
でき、オブジェクトの破壊と構築を回避できるため、時間を大幅に節約できます。+=
5. 応用シナリオ
配列、numpy、pandas、tensor などのオブジェクトは、要素数が多い場合、オブジェクトの破棄と構築に多くの時間がかかりますが、この際、Python のメモリ処理の仕組みを理解して、オブジェクトのメモリ データを代わりに処理するようにしてください。新しいオブジェクトを再構築する時間が大幅に節約され、プログラムの実行効率が向上します。