変数を消してメモリを増やす方法
リンク先の Qiita の記事のやり方 (del で消す) で実際に変数を削除できますよ。
以下、確認した方法です。
python
1import sys
2import numpy as np
3
4def print_memory_usage():
5 for var_name in globals():
6 if not var_name.startswith("_"):
7 print("{: >25}{: >10} bytes".format(var_name, sys.getsizeof(eval(var_name))))
8
9# データだけなら、8 * 100 * 100 * 3 = 240000 bytes
10mat = np.zeros((100, 100, 3), dtype=float)
11print_memory_usage()
mat 240128 bytes
autopep8 80 bytes
exit 56 bytes
json 80 bytes
np 80 bytes
Out 288 bytes
In 128 bytes
isort 80 bytes
print_memory_usage 136 bytes
sys 80 bytes
get_ipython 64 bytes
python
1del mat
2print_memory_usage()
quit 56 bytes
autopep8 80 bytes
exit 56 bytes
json 80 bytes
np 80 bytes
Out 288 bytes
In 128 bytes
isort 80 bytes
print_memory_usage 136 bytes
sys 80 bytes
get_ipython 64 bytes
今どのくらいメモリを消費しているかわかるようなライブラリはあるのでしょうか?
ソフトウェア (Windows ならタスクマネージャー、Linux なら free コマンド) で確認したほうがいいと思いますが、Python のコードで確認したい場合は、メモリなどシステムに関する情報を確認できる psutil というライブラリがあります。
pip install psutil でインストールできます。
psutil documentation — psutil 5.6.2 documentation
python
1import psutil
2
3info = psutil.virtual_memory()
4print(info)
5# svmem(total=67497332736, available=54389481472, percent=19.4, used=10516938752,
6# free=17032527872, active=18114748416, inactive=24519929856, buffers=431259648,
7# cached=39516606464, shared=2041597952, slab=6908645376)
8
9print('available: {:.2f} GB'.format(info.available / 2**30)) # available: 50.65 GB
1つの Notebook でいろいろなコードを実行していると、使ってない変数でもカーネルをシャットダウンする前まではずっと残っているので、使い終わった Notebook はシャットダウンしましょう。
書いてる最中でも試行錯誤して未使用な変数がスタックしてきたら、手動で消すより、Notebook をリスタートしたほうがよいです。
追記
100000という値と1という値が同一として表されているのはおかしい
Python の int 型は格納する値の大きさによって適切に拡張されるようになっているので、1 と 100000 はたまたま同じメモリ量で表されていたのだと思います。
C++ の std::vector のように最初は一定量のメモリを確保しておいて、足りなくなったら拡張するようになっているみたいです。
import sys
a = 10000
b = 10000000000000000
print(sys.getsizeof(a), sys.getsizeof(b)) # 28, 32
詳しい解説が以下にありました。
Understanding memory allocation for large integers in Python - Stack Overflow