__del__
方法的循环。 (PEP 442)。
但为什么我得到了python2.7和pyton3.6的相同结果呢?
a,b,foo,bar
已被释放?
import gc
import sys
class Foo(object):
def __init__(self):
self.bar = None
print('foo init')
def __del__(self):
print("foo del")
class Bar(object):
def __init__(self):
self.foo = None
print('bar init')
def __del__(self):
print('bar del')
def collect_and_show_garbage():
print("Collecting...")
n = gc.collect()
print("unreachable objects:", n)
def func():
foo = Foo()
bar = Bar()
foo.bar = bar
bar.foo = foo
def func2():
a = [1, 2]
b = [3, 4]
a.append(b)
b.append(a)
func()
func2()
collect_and_show_garbage()
foo init
bar init
收集...
foo del
酒吧德尔 无法到达的物体:6
当我删除__del__
方法时,我得到了相同的结果
import gc
import sys
class Foo(object):
def __init__(self):
self.bar = None
print('foo init')
class Bar(object):
def __init__(self):
self.foo = None
print('bar init')
def collect_and_show_garbage():
print("Collecting...")
n = gc.collect()
print("unreachable objects:", n)
def func():
foo = Foo()
bar = Bar()
foo.bar = bar
bar.foo = foo
def func2():
a = [1, 2]
b = [3, 4]
a.append(b)
b.append(a)
func()
func2()
collect_and_show_garbage()
foo init
bar init
收集...
无法到达的物体:6
答案 0 :(得分:0)
GC.Collect的:
返回无法访问的对象数。
gc.garbage:
收集器发现无法访问的对象列表 无法释放(无法收集的物品)。
import gc
import sys
class Foo(object):
def __init__(self):
self.bar = None
print('foo init')
def __del__(self):
print("foo del")
class Bar(object):
def __init__(self):
self.foo = None
print('bar init')
def __del__(self):
print('bar del')
def collect_and_show_garbage():
print("Collecting...")
n = gc.collect()
print("unreachable objects:", n)
print("uncollectable objects:", gc.garbage)
def func():
foo = Foo()
bar = Bar()
foo.bar = bar
bar.foo = foo
def func2():
a = [1, 2]
b = [3, 4]
a.append(b)
b.append(a)
func()
func2()
collect_and_show_garbage()
python2.7
foo init
bar init
收集...
('无法到达的对象:',6)
(&#39;无法收集的对象:&#39;,[&lt; 主 .Foo对象位于0x10cff55d0&gt;,&lt; main .Bar对象位于0x10cff5650&gt;])< / p>
pyhton3.6
foo init
bar init
收集...
foo del
酒吧德尔 无法到达的物体:6
无法收集的物品:[]