1

次のように、int 値が削除されても、Python は int 値に割り当てられたスペースを保持します。

age = 9999
del age

メモリに格納された変数 age は、他の int 値を格納するために使用されます。その結果、このメモリに対して free 関数が呼び出されることはありませんが、文字列オブジェクトが同じ戦略を使用してメモリを管理するかどうかはわかりませんか? つまり、文字列のメモリ割り当ては決して解放されません。

Python が int オブジェクトのメモリを解放しない理由については、次のブログをお読みください: http://www.laurentluce.com/posts/python-integer-objects-implementation/

Python は free_list (python-2.7.3 source code:intobject.c line:45) を管理して、int オブジェクトのすべてのメモリ割り当てを保持し、割り当てを解除しません。

4

2 に答える 2

4

Python がすべてのメモリを管理します。値が名前で参照されている場合、その値はメモリに残ります。値が名前によって参照されなくなると、インタプリタは自由にメモリを再利用できます。これについて心配する必要はありません。

あなたの例、または「年齢」によって使用されるメモリが再度使用されると考える理由がわかりません。Python の名前は C の変数とは異なり、割り当てられたメモリを表すものではないことに注意してください。値を参照できるラベルです。

于 2013-01-27T15:46:04.963 に答える
2

Python 文字列の実装を見ると、関連する行が見つかります。

op = (PyStringObject *)PyObject_MALLOC(sizeof(PyStringObject) + size);

これは、文字列が python の malloc を使用して単純に割り当てられていることを示しています。Python 文字列オブジェクトは文字列の長さによってサイズが異なるため、整数のようなプールは使用しません。したがって、整数の場合と同じ方法でプールを使用することはできません。

参照: http://www6.uniovi.es/python/dev/src/c/html/stringobject_8c-source.html

于 2013-01-27T16:01:35.890 に答える