是否需要删除以释放内存

2024-10-01 09:25:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下代码,其中我重新分配了多个GB的列表:

    res = self.dict_cursor.fetchall()
    res_with_offers = []

    # we add in HDBUY, SDBUY for now -- HARDCODED
    for item in res:
        for avail_code in ['HDBUY', 'SDBUY']:
            _item = deepcopy(item)
            _item['avail_code'] = avail_code
            res_with_offers.append(_item)

    del res; # <== is this line needed?
    res = res_with_offers

我的理解是del res;,作为下面一行的变量重新分配,它将删除内存中初始的res项。这是对的吗?为什么或者为什么不呢?在


Tags: 代码inself列表forwithcoderes
1条回答
网友
1楼 · 发布于 2024-10-01 09:25:14

标识符可以绑定到Python中的对象,也可以不绑定到任何对象。这就是全部。在

如果identifier被绑定到一个对象,del identifier将删除绑定,使{}不绑定到任何对象。这就是全部。它对是否释放内存没有直接影响。在

当移除与对象的最后一个绑定时,该对象就有资格进行垃圾回收。在那之前不会。在

在您展示的代码中,实际上无法确定最初绑定到res的对象何时有资格进行垃圾回收。据我们所知,例如

res = self.dict_cursor.fetchall()

fetchall()从内部持久缓存返回了一个对象。那么

^{pr2}$

将通过res删除与对象的绑定,但不会对对象的任何其他可能绑定产生影响。在所有绑定都消失之前,无法回收该对象。在

在任何情况下,del res

del res
res = anything

没什么用。res最终被绑定到{},而不管{}是否存在,{}的原始绑定也被移除,而不管{}是否存在。在

相关问题 更多 >