【发布时间】:2022-07-07 17:28:13
【问题描述】:
我正在查看 Python 代码库的内存消耗。该代码库利用pandas 和numpy 来处理庞大的数据帧。
当我们完成中间数据表示后,我们希望释放它以释放一些内存。我的一位同事注意到调用del dataframe 和del [[dataframe]] 之间存在差异:
他们由此得出结论 “如果del df 会和del [[df]] 做同样的事情,那么来自单元格 12 的内存应该与来自单元格 10 的内存相同,介于 12 和 14 之间,但你可以看到并不是所有的内存都被释放以再次使用。”
我同意他们对这里实践逻辑的理解。然而,当试图建立一种理论理解来支持该代码时,我找不到一个明确的解释来解释为什么会有所不同。
查看this answer,采用target_list 的del 语句的定义应该使del my_list 和del [my_list]/del [[my_list]]/del [[[my_list]]] 等效:
del_stmt ::= "del" target_list
然而在this answer 中,作者使用del [[df1, df2]] 而不是del df1, df2 甚至del [df1, df2]。
更糟糕的是,this answer 甚至声明相反:“如果你只是添加到列表中,它不会删除原始数据帧,当你删除列表时”,并得出结论认为人们应该更喜欢 del df1 而不是 @987654344 @。
当语言定义表明它们是相同的时,这些对del 的调用之间怎么会有区别?
【问题讨论】:
标签: python pandas dataframe memory-management garbage-collection