簡體   English   中英

Python memory 管理創建變量時將 go 轉化為函數

[英]Python memory management when creating variables that go into functions

我有兩個大小為(10000,100,100) (非常大)的 arrays AB 我需要執行一系列操作以將它們傳遞給其他函數。 我的問題是:memory怎么存最多? 我舉一個具體的例子。

A = np.random.rand(10000,100,100)
B = np.random.rand(10000,100,100)

def ave_l2_error(diffs):
    for err in diffs:
        print(np.mean(err))

def ave_l1_error(diffs):
    for err in diffs:
        print(np.mean(err))

#Is there a difference in terms of memory usage between doing this:
L2 = [np.power(A-B, 2)]
L1 = [np.abs(A-B)]
ave_l2_error(L2)
ave_l1_error(L1)

#vs this:
ave_l2_error([np.power(A-B, 2)])
ave_l1_error([np.abs(A-B)])

我認為第一種情況使用更多 memory 因為它節省了L1L2 這個reddit 線程討論重命名變量,但這是一個稍微不同的情況(或者可能不是)。 垃圾收集器會在這里檢測到L1L2不再使用,因此將它們刪除嗎? 如果代碼在可以訪問變量的 IPython(而不是 shell)中運行怎么辦? 這種情況會有所作為嗎?

在第一個版本中,由np.power()np.abs()創建的 arrays 將保留在 memory 中,直到腳本結束,因為變量防止它們成為垃圾。

在第二個版本中,當 function 返回時,arrays 將被垃圾回收,因為它們僅分配給 function 參數,當 function 退出時,go 將消失。 所以這個版本會少用memory。

如果在 function 調用中使用變量后重新分配或刪除變量,則可以使第一個版本與第二個版本相同。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM