【发布时间】:2019-04-21 07:30:49
【问题描述】:
我有以下代码,我在其中重新分配了几个 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 项目。它是否正确?为什么或为什么不?
【问题讨论】:
-
顺便说一句,支持结构共享的语言可能更适合解决您的问题,同时保持内存使用受到限制——在 Clojure,f/e 中,您不需要
deepcopy(),因为原生类型/结构首先是不可变的(并且创建一个带有更改的新列表/字典不会改变任何东西,除了树中进行更改的点的父级,减少了实际的内容量需要复制)。
标签: python python-3.x