首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Python del语句

Python del语句
EN

Stack Overflow用户
提问于 2013-02-20 07:42:45
回答 4查看 10K关注 0票数 26

在Python中对变量调用del。这是立即释放分配的内存,还是仍在等待垃圾收集器收集?与java中一样,显式调用del对何时释放内存没有任何影响。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-02-20 07:47:38

del语句不回收内存。它移除一个引用,这会递减该值的引用计数。如果计数为零,则可以回收内存。CPython会立即回收内存,不需要等待垃圾收集器运行。

事实上,垃圾收集器只在回收循环结构时才需要。

正如Waleed Khan在他的评论中所说,Python内存管理只是工作,您不必担心它。

票数 35
EN

Stack Overflow用户

发布于 2013-02-20 07:46:59

“删除名称会将该名称的绑定从本地或全局名称空间中移除”。不多也不少。它不会对名称指向的对象做任何操作,除了减少它的refcount,如果refcount不是零,那么即使在GC运行时也不会收集该对象。

票数 3
EN

Stack Overflow用户

发布于 2016-08-12 14:24:25

而且,del语句似乎比分配None (类似于将null分配给变量以释放其内存...)要快一点。

要比较,请执行以下操作:

代码语言:javascript
复制
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中运行):

代码语言:javascript
复制
>>> 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
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14969739

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档