如何理解关于python内存回收模块gc中的这段代码?

发布于 2022-09-01 13:04:05 字数 504 浏览 9 评论 0

1、例如:

import gc
import sys
gc.set_debug(gc.DEBUG_STATS|gc.DEBUG_LEAK)
a=[]
b=[]
a.append(b)
print 'a refcount:',sys.getrefcount(a)
print 'b refcount:',sys.getrefcount(b)

del a
del b
print gc.collect()

不能进入垃圾,

a,b都被切断,而且a.append(b)也不存在循环,为什么还是无法回收垃圾?

2、还有一个问题

我在windows中有一个数组a[],里面放了10k+条数据,内存显示60%,在del agc.collect()之后内存立马降至52%;
但是同样的代码操作在centos中却不起作用,内存释放不出来。

请教大家!!!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

把梦留给海 2022-09-08 13:04:05

你都显式地删除了这两个变量,并且你也说了,不存在循环引用,那就直接被删掉了呗,哪还有垃圾?

a=[]  
b=[]  
a.append(b)  
b.append(a)  
del a  
del b  
print gc.collect() 

这样就可以看到垃圾收集的效果了

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文