首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >del [dataframe]与`del dataframe‘有何不同?

del [dataframe]与`del dataframe‘有何不同?
EN

Stack Overflow用户
提问于 2022-07-07 09:24:08
回答 1查看 230关注 0票数 1

我在看Python代码库的内存消耗。这个代码库利用pandasnumpy来操纵巨大的数据帧。

当我们完成中间数据表示时,我们希望释放它来释放一些内存。我的一位同事注意到调用del dataframedel [[dataframe]]是有区别的

他们由此得出结论:“如果del dfdel [[df]]做同样的事情,那么来自单元格12的内存应该与单元格10中的内存相同,介于12到14之间,但是您可以看到,并不是所有的内存都被释放出来重新使用。”

我同意他们对实践逻辑中发生的事情的理解。然而,当我试图建立一个理论上的理解来支持这些代码时,我无法清楚地解释为什么这会有所不同。

查看this answer,使用target_listdel语句的定义应该使del my_listtarget_list等效:

代码语言:javascript
复制
del_stmt ::=  "del" target_list

然而在this answer中,作者使用的是del [[df1, df2]]而不是del df1, df2,甚至是del [df1, df2]

更糟糕的是,this answer甚至说了相反的话:“如果您只是添加到列表中,它就不会删除原始的dataframe,当您删除该列表时”,并得出结论认为应该更喜欢del df1而不是del [df1]

如果语言定义表明对del的调用是相同的,那么它们之间又有什么区别呢?

EN

回答 1

Stack Overflow用户

发布于 2022-07-07 09:28:13

从字面上讲,两者没有任何区别。他们也做同样的事。它们甚至编译成完全相同的字节码:

代码语言:javascript
复制
In [1]: import dis

In [2]: dis.dis('del x')
  1           0 DELETE_NAME              0 (x)
              2 LOAD_CONST               0 (None)
              4 RETURN_VALUE

In [3]: dis.dis('del [x]')
  1           0 DELETE_NAME              0 (x)
              2 LOAD_CONST               0 (None)
              4 RETURN_VALUE

In [4]: dis.dis('del [[x]]')
  1           0 DELETE_NAME              0 (x)
              2 LOAD_CONST               0 (None)
              4 RETURN_VALUE

您看到的结果很可能是由于执行顺序效应造成的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72895344

复制
相关文章

相似问题

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