Python 檢視當前環境所有變數的大小

evtricks發表於2024-08-15

方法一 簡單列印

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庫:

pip install memory_profiler

然後,使用@profile裝飾器來監控函式的記憶體使用情況:

from memory profiler import profile

@profile
def test():
    a = [i for i in range(1000000)]

test()

  

執行上述程式碼後,會生成一個名為memory_profiler_test.txt的檔案,其中包含了每行程式碼的記憶體使用情況。

相關文章