gpt4 book ai didi

python - 在列表中调用 'del'

转载 作者:太空狗 更新时间:2023-10-30 00:37:09 27 4
gpt4 key购买 nike

class ToBeDeleted:
def __init__(self, value):
self.value = val

# Whatever...

def __del__(self):
print self.value

l = [ToBeDeleted(i) for i in range(3)]
del l

这会打印 2, 1, 0


  • 现在,删除元素的顺序是在规范中某处定义的还是特定于实现的? (或者我可能不了解底层机制)

  • 例如,输出可以是 0, 1, 2 吗? 我意识到 2, 1, 0 顺序可能是为了避免在删除元素时重新分配元素的内存,但问题仍然存在。

    <
  • 最后一个 - del ldel l[:] 语句有什么区别?

最佳答案

运行 del l 将删除对列表的任何引用,因此符号 l 将消失。相反,运行 del l[:] 会删除列表的内容,将 l 留为空列表。

__del__方法是在销毁对实例的最后一个引用时运行的方法。

删除的顺序没有指定并且是特定于实现的。当您运行 del l 时,唯一可以保证的是列表 l 及其每个元素的引用计数将减少 1。

使用 pypy,在垃圾收集器运行之前不会发生任何其他事情。对象移除的顺序取决于 GC 访问对象的顺序。

cpython 中,OP 正确地观察到引用递减是从右到左发生的。当调用 del l[:] 时,这里是用于减少引用计数的代码:http://hg.python.org/cpython/file/2.7/Objects/listobject.c#l700 .当调用 del l 时,类似的代码用于减少引用计数:http://hg.python.org/cpython/file/2.7/Objects/listobject.c#l596

关于python - 在列表中调用 'del',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8205102/

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