在Python中对变量调用del。这是立即释放分配的内存,还是仍在等待垃圾收集器收集?与java中一样,显式调用del对何时释放内存没有任何影响。
发布于 2013-02-20 07:47:38
del语句不回收内存。它移除一个引用,这会递减该值的引用计数。如果计数为零,则可以回收内存。CPython会立即回收内存,不需要等待垃圾收集器运行。
事实上,垃圾收集器只在回收循环结构时才需要。
正如Waleed Khan在他的评论中所说,Python内存管理只是工作,您不必担心它。
发布于 2013-02-20 07:46:59
“删除名称会将该名称的绑定从本地或全局名称空间中移除”。不多也不少。它不会对名称指向的对象做任何操作,除了减少它的refcount,如果refcount不是零,那么即使在GC运行时也不会收集该对象。
发布于 2016-08-12 14:24:25
而且,del语句似乎比分配None (类似于将null分配给变量以释放其内存...)要快一点。
要比较,请执行以下操作:
import time, math
def measure_del():
start = time.time()
for i in range(0,int(math.pow(10,8))):
a = "123"
del a # <--- !!!
end = time.time()
print(end-start)
def measure_none():
start = time.time()
for i in range(0,int(math.pow(10,8))):
a = "123"
a = None # <--- !!!
end = time.time()
print(end-start)结果(在idle3.4中运行):
>>> measure_del()
3.9930295944213867
>>> measure_del()
3.7402305603027344
>>> measure_del()
3.8423104286193848
>>> measure_del()
3.753770351409912
>>> measure_del()
3.7772741317749023
>>> measure_del()
3.815058946609497
>>> measure_none()
4.052351236343384
>>> measure_none()
4.130320072174072
>>> measure_none()
4.082390069961548
>>> measure_none()
4.100180625915527
>>> measure_none()
4.071730375289917
>>> measure_none()
4.136169672012329https://stackoverflow.com/questions/14969739
复制相似问题