Python的声明(Python del statement)

2019-07-20 05:02发布

调用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