[英]Python memory management when creating variables that go into functions
我有兩個大小為(10000,100,100)
(非常大)的 arrays A
和B
我需要執行一系列操作以將它們傳遞給其他函數。 我的問題是: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 因為它節省了L1
和L2
。 這個reddit 線程討論重命名變量,但這是一個稍微不同的情況(或者可能不是)。 垃圾收集器會在這里檢測到L1
和L2
不再使用,因此將它們刪除嗎? 如果代碼在可以訪問變量的 IPython(而不是 shell)中運行怎么辦? 這種情況會有所作為嗎?
在第一個版本中,由np.power()
和np.abs()
創建的 arrays 將保留在 memory 中,直到腳本結束,因為變量防止它們成為垃圾。
在第二個版本中,當 function 返回時,arrays 將被垃圾回收,因為它們僅分配給 function 參數,當 function 退出時,go 將消失。 所以這個版本會少用memory。
如果在 function 調用中使用變量后重新分配或刪除變量,則可以使第一個版本與第二個版本相同。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.