【问题标题】:Deleting object in function删除函数中的对象
【发布时间】:2010-03-16 00:49:47
【问题描述】:

假设我从foo 类创建了两个对象,现在想将两者结合起来。如果可能的话,我如何在这样的函数中完成它:

def combine(first, second):
    first.value += second.value
    del second #this doesn't work, though first.value *does* get changed

而不是做类似的事情

def combine(first, second):
    first.value += second.value

在函数中并在函数调用之后立即放置del second

【问题讨论】:

  • 当你说“这行不通”时,你是什么意思? del 似乎有一些你期待但没有看到的效果。
  • 我的意思是一旦我退出 combine 函数,它就不会删除对象
  • 怎么知道对象没有被删除?
  • @Lott:我仍然可以调用它的函数

标签: python function python-3.x


【解决方案1】:

没有。 del 对名称所做的所有操作都是解除绑定。这只会删除本地引用。当任何地方都没有对它的引用或所有引用都在引用循环中时,该对象将被销毁。

【讨论】:

  • 对象将在您最后一次访问它们和程序结束之间被销毁。在 CPython 中,大多数对象会立即销毁,而循环会定期销毁(定义了__del__ 的对象循环除外)。当然,使用引用循环的充分理由很少,定义__del__ 的理由也更少。
猜你喜欢
  • 2021-06-15
  • 1970-01-01
  • 2019-05-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-12
  • 2021-04-12
相关资源
最近更新 更多