Open1

機械学習周りの勉強中に学んだpythonの仕様についてのメモ

knkknk

#Python におけるガベージコレクション
kaggleで他人のコードを見ると大体import gc は冒頭のimport 文の羅列の中で入ってくる
メモリがきつい場合にはgc moduleを使って以下のようにメモリを手動で解放する必要がある

import gc 
~~~
gc.collect()

Garbage collectionとは

必要なくなったメモリを自動的に解放する機能
javaでよく聞いた気がする。エラーで割りにはく

pythonでのGarbage collection

参照カウントと世代別GCの2つがある

参照カウント

現時点での理解だと、プログラムが参照しているスコープにそのオブジェクトがいるか?みたいなことを記録している数字で、これが0になるとそれが不要だと判断してメモリを解放するというイメージ
具体的に参照カウントが増えるのは、代入演算子を使った時、引数引渡しを行った時、コンテナ型オブジェクトに追加した時、
らしいが実際にどのように使われていつ減るかは理解していない(代入先が消えたら?)

Every time a reference gets removed, the reference count is decremented, and once the reference count reaches 0, we know that nothing holds a reference to that object and we can deallocate it!

参考)https://riptutorial.com/python/topic/2532/garbage-collection
###世代別GC
参照カウントの問題として循環参照になったときに参照カウントが常に1以上になるので、それを回避するための機構
詳しくはこれを読む https://rushter.com/blog/python-garbage-collector/