python hello.py(A) はコードを 1 回実行し、(A) がimport helloコードを呼び出すと (B) が再度実行され、(A) と (B) が を呼び出すreload(hello)と、コードはさらに 2 回実行され、合計で 4 回実行されます。
一般に、プログラムの存続期間中、モジュールのコードは次の時点で実行されます。
- メインモジュールの場合は1回
- 任意のモジュール (それ自体を含む) によって初めてインポートされたとき
- モジュールでいつでも
reload()呼び出されます
が再帰的に呼び出されない理由については、reload()これを防ぐために PyImport_ReloadModule() 関数 (CPython、ファイルは import.c) への早期終了ポイントがあります。
http://svn.python.org/view/python/trunk/Python/import.c?view=markup#l2646
...
existing_m = PyDict_GetItemString(modules_reloading, name);
if (existing_m != NULL) {
/* Due to a recursive reload, this module is already
being reloaded. */
Py_INCREF(existing_m);
return existing_m;
}
... load module code is below here