代码和注释如下,先谢谢各位
# -*- coding: utf-8 -*-
class A(object):
def __init__(self, name):
self.name = name
def foo(self):
print(self.name)
all_name = ['a', 'b', 'c', 'd', 'e'] # 甚至更多
for name in all_name:
a = A(name) # 得到一个实例
a.foo() # 这个实例在执行这个函数后,会不会被垃圾回收呢?
# 如果不立即回收,是不是循环多次后,内存是不是占用很大?
# 在循环中不断构造实例,是不是合理的?
1
BarrelTitor 2017-07-10 00:59:06 +08:00 1
在 A 中加个__del__方法,print 一下应该就可以看到了。
我 mac 上 3.6 是立刻删除的。 |
2
est 2017-07-10 01:09:33 +08:00 via iPhone 1
a 不会回收但是第二个循环重新赋值之后就回收了
|
3
wwqgtxx 2017-07-10 01:43:06 +08:00 via iPhone 1
@BarrelTitor 不过平时最好不要加__del__方法,否则在两个类有循环引用的情况下会无法垃圾回收
|
4
wisefree OP @BarrelTitor 这种在循环不断构造实例,合理就行,以前都是构造几个类就 OK 了,突然放在循环里有点不适应
|
6
ToBeHacker 2017-07-10 10:08:58 +08:00
Python 主要通过引用计数清理垃圾,在二次循环后 a 被重新复制,原先的引用减为 0 后就会被立即清理
|