gpt4 book ai didi

python - 是否需要删除以释放内存

转载 作者:行者123 更新时间:2023-11-28 21:34:22 24 4
gpt4 key购买 nike

我有以下代码,我在其中重新分配了几个 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内存中的项目。它是否正确?为什么或为什么不?

最佳答案

标识符可以绑定(bind)到Python中的对象,也可以不绑定(bind)到任何东西。仅此而已。

如果identifier绑定(bind)到一个对象,delidentifier会删除绑定(bind),使identifier不绑定(bind)到任何东西。 仅此而已。对于内存是否释放没有直接影响。

当对象的最后一个绑定(bind)被删除时,该对象就可以进行垃圾回收。在那之前不会。

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

res = self.dict_cursor.fetchall()

fetchall() 从内部持久缓存返回一个对象。然后

del res

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

无论如何,del res 位于:

del res
res = anything

没有任何实际目的。无论 del res 是否存在,res 最终都会绑定(bind)到 anything,因此 res 的原始绑定(bind)无论 del res 是否存在,也会被删除。

关于python - 是否需要删除以释放内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53366165/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com