感觉Python在以下两种情况下处理内存的方式不同:
案例1
import numpy as np
while True:
array = np.ones((10000, 10000))
案例2
import mediapipe as mp
while True:
faceMesh = mp.solutions.face_mesh.FaceMesh(False, 3, True, 0.5, 0.5)
情形1根本不会导致内存溢出,但是,情形2确实很快地填充了RAM。你能解释一下python是如何管理内存使用的吗?为什么第1种情况不会导致溢出,而第2种情况会导致溢出?
在内部,Python使用引用计数器。当运行variable = value1
时,value1
的引用计数器增加。当您运行variable = value2
时,value1
的引用计数减少,value2 is incremented. If the count on
的value1 '下降为零,可以删除。
其他的都取决于系统和模块。看起来numpy立即释放了空间。在任何实例中活动的数组都不会超过2个。我不知道mediapipe在做什么。