栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

复合对象上的python垃圾收集器行为

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

复合对象上的python垃圾收集器行为

没有东西引用列表

A
和嵌套列表
A[0]
,所以是的,它们将从内存中删除。

引用的嵌套列表对象

A[1]
没有返回到其原始容器的连接。

请注意,不是由垃圾收集器执行此操作。GC仅处理中断循环引用。这种简单的情况完全通过引用计数来处理。

当下

foo()
的回报,当地的命名空间清理。这意味着
A
已删除,这意味着列表对象引用计数降至0。这将清除该列表对象,这意味着所 包含的
列表也会看到其引用计数减一。因为
A[0]
这意味着计数也下降到0并被清除。

对于由引用的列表对象

A[1]
,您现在已有对其的引用
B
,因此它的计数仍为1,并且仍为“有效”。

要通过代码确认相同的内容,只需使用

list
带有
__del__
方法的子类,让我们知道何时删除对象:

>>> class DelList(list):...     def __del__(self):...         print 'Deleted {}'.format(self)... >>> def foo():...     A = DelList([DelList([1, 3, 5, 7]), DelList([2, 4, 6, 8])])...     return A[1]... >>> B = foo()Deleted [[1, 3, 5, 7], [2, 4, 6, 8]]Deleted [1, 3, 5, 7]>>> del BDeleted [2, 4, 6, 8]

所有这些都特定于CPython(参考Python实现);其他实施方式可以处理对象的寿命不同(例如做使用垃圾收集器来破坏在扫描对象),但的寿命

A
A[0]
不在这些情况下发生变化;
尽管可能在不同的时间点,GC仍将收集其他实现中的那些。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/624605.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号