首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >即使没有指向对象的非弱引用,弱引用也不能计算为None吗?

即使没有指向对象的非弱引用,弱引用也不能计算为None吗?
EN

Stack Overflow用户
提问于 2012-03-21 07:20:21
回答 4查看 461关注 0票数 2

据我所知,Python3不保证何时释放对象的内存,除非至少有一个非弱引用指向对象,它就不会被释放。

该语言是否对弱引用做出了任何其他保证?特别地,假设我创建了一个指向某个对象弱引用wr。假设在以后的某个时间,对该对象的所有非弱引用都已销毁。是否保证在那时wr的计算结果为None,或者在一段时间内它是否仍然计算为原始对象?

除了语言保证,是否有任何有趣的实现行为围绕着弱化?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-03-22 02:44:42

虚弱引用可以给你一个有效的对象(来自Python的POV),或者一个都没有。对象在哪一点被实际释放(导致弱引用变为无)是未定义的,除了不能有任何其他活动对象对该对象的任何非弱引用。不能保证您在CPython中观察到的引用计数行为。

票数 1
EN

Stack Overflow用户

发布于 2012-03-21 07:27:28

弱引用对象只有在GC生效后才会被销毁。因为这是不确定的,所以不能保证一旦所有强引用都被删除,它就会被销毁。

docs

...when对引用对象的唯一剩余引用是弱引用,垃圾回收可以自由地销毁引用对象,并将其内存重用于其他对象。

有效的短语是“自由地摧毁所指对象”--它可能不会立即发生。

票数 1
EN

Stack Overflow用户

发布于 2012-03-21 07:28:00

不,Python不保证对象何时被实际收集,并且弱引用将返回None。这可以立即发生(在CPython中经常发生,它使用引用计数加上循环引用垃圾收集器,但在其他不使用引用计数的Python实现中很少发生)。由于多种原因,它也会被延迟--不使用CPython (或使用不使用refcounting的CPython版本),或者使用refcounting但对象参与引用循环时。

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

https://stackoverflow.com/questions/9796492

复制
相关文章

相似问题

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