質問: C言語やPythonを勉強しています。 ファイル読み込みの際、リソースの無駄を避けるためや正しく処理を終わらせるために必ずファイルを閉じること、pythonではwith asを必ず使うことと教わりました。 ここで質問なのですが、ファイルの閉じ忘れで割り当てられて放置されているリソースはその後どうやって解放されるのでしょうか? 再起動やシャットダウンを行えばリセットされるのでしょうか? よろしくお願いします。
回答: PythonではファイルオブジェクトがGCに回収されたタイミングで暗黙的にcloseされます。 > > オブジェクトには、開かれたファイルやウィンドウといった、 "外部 (external) の" リソースへの参照を含むものがあります。これらのリソースは、オブジェクトがごみ収集された際に解放されるものと理解されていますが、ごみ収集が行われる保証はないので、こうしたオブジェクトは外部リソースを明示的に解放する方法、大抵は close() メソッドも提供しています。こうしたオブジェクトは明示的に close するよう強く奨めます。この操作をする際には、'try...finally' 文や、 'with' 文を使うと便利です。 > > > 3. データモデル — Python 3.6.5 ドキュメント > > > C言語だと、プロセスが終了するまで開かれっぱなしだったと思います。