调用del
对Python中的变量。 这是否马上或仍然可以自由分配的内存等待垃圾收集器收集? 像Java中,显式调用del
具有当内存被释放,没有任何影响。
Answer 1:
del语句不回收内存。 它消除的参考,其递减的值的引用计数。 如果计数为零,内存可以被回收。 CPython的将立即回收内存,没有必要等待垃圾收集器运行。
事实上,只需要回收环状结构的垃圾收集器。
作为瓦利德·汗在他的评论中说,Python的内存管理只是工作,你不必担心。
Answer 2:
“名字的缺失去这个名字的结合从本地或全局命名空间”。 无多,不会少。 当然这并不能名义指出,除了递减其引用计数的对象,如果引用计数不为零,对象也不会,即使GC运行收集。
Answer 3:
此外,del语句似乎有点比分配无 (类似于Java的风格分配空给一个变量来释放它的内存...)更快。
比较:
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.136169672012329
文章来源: Python del statement