Pythonで同じオブジェクトが複数回呼び出された場合、「self」を出力したときにメモリの場所は常に同じになりますか?
3 に答える
私の知る限り、Cpythonのメモリアドレスは-設計上-静的です。オブジェクトのメモリアドレスは で見ることができますid()
。関数の名前は、それが変わらないという事実の物語です...
id()
ただし、他のSOユーザーがメモリアドレスであることはCpythonの詳細な実装であると指摘した以下のコメントを参照してください。
チッ!
非常に高水準の言語であるため、Pythonはオブジェクトの「メモリアドレス」を定義しないことに注意してください。ただし、オブジェクトには、組み込みid()
関数を使用して照会できる「ID」があります。このIDは、オブジェクトの存続期間中に変更されないことが保証されています。
オブジェクトの「ID」を返します。これは整数(または長整数)であり、このオブジェクトの存続期間中、一意で一定であることが保証されています。ライフタイムが重複しない2つのオブジェクトは、同じid()値を持つ場合があります。
CPythonでは、このIDは基礎となるメモリアドレスですが、これは単なる実装の詳細です。他の実装では異なる可能性があり、CPythonの将来のバージョンでも変更される可能性があります(これはありそうにありませんが)。
Macが気づいたように、Cpython のメモリ アドレスは - 設計上 - 静的です
しかし、Cpython でも、いくつかの c 拡張機能を使用している場合、これを中継することはできません。それらのいくつかは、オブジェクトを移動し、手動でガベージ コレクターを駆動できます。
また、 PyPyなどの他の Python 実装を使用している場合、オブジェクトのメモリ位置が常に同じであるとは限りません。