方法一 簡單列印
https://blog.csdn.net/lly1122334/article/details/104757467
def show_memory(unit='KB', threshold=1): '''檢視變數佔用記憶體情況 :param unit: 顯示的單位,可為`B`,`KB`,`MB`,`GB` :param threshold: 僅顯示記憶體數值大於等於threshold的變數 ''' from sys import getsizeof scale = {'B': 1, 'KB': 1024, 'MB': 1048576, 'GB': 1073741824}[unit] for i in list(globals().keys()): memory = eval("getsizeof({})".format(i)) // scale if memory >= threshold: print(i, memory, unit) if __name__ == '__main__': a = [i for i in range(10000)] show_memory("KB",10) # a 85 KB
這個會顯示所有的變數,透過threshold篩選
方法二 格式化輸出
https://blog.csdn.net/csdndscs/article/details/133279613
import sys print("{}{: >40}{}{: >10}{}".format('|','Variable Name','|','Memory(M)','|')) print(" ------------------------------------------------------") for var_name in dir(): if not var_name.startswith("_"): var_size=sys.getsizeof(eval(var_name))/1024**2 if var_size>=1: #這裡只輸出所佔記憶體大於等於1M的變數 print("{}{: >40}{}{:>10.2f}{}".format('|',var_name,'|',var_size,'|'))
方法三 新增排序
import sys def print_size_of_all(th=1, nums=10): # th決定選取多少MB以上的, nums決定顯示多少個變數 print("{}{: >40}{}{: >10}{}".format('|', 'Variable Name', '|', 'Memory(M)', '|')) print(" ------------------------------------------------------") var_list = [] for var_name in list(globals().keys()): if not var_name.startswith("_"): var_size=sys.getsizeof(eval(var_name))/1024**2 if var_size>=th: #這裡只輸出所佔記憶體大於等於th MB的變數 var_list.append((var_name, var_size)) sorted_var_list = sorted(var_list, key=lambda x:x[1], reverse=True) nums = len(var_list) if len(var_list) < nums else len(var_list) for v in sorted_var_list[:nums]: print("{}{: >40}{}{:>10.2f}{}".format('|',v[0],'|',v[1],'|')) print_size_of_all()
| Variable Name| Memory(M)| ------------------------------------------------------ | b| 7629.39| | c| 848.47| | a| 34.79|
方法四 使用memory_profiler
庫
https://blog.csdn.net/weixin_30303283/article/details/140745370
memory_profiler
是一個用於監控Python程式記憶體使用的庫。它可以顯示每行程式碼的記憶體使用情況。
首先,需要安裝memory_profiler
庫:
然後,使用@profile
裝飾器來監控函式的記憶體使用情況:
執行上述程式碼後,會生成一個名為memory_profiler_test.txt
的檔案,其中包含了每行程式碼的記憶體使用情況。