使用__del__方法收集循环。(第442页)
但是为什么我得到了同样的结果呢?
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 吧台 收集。 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 吧台 收集。 无法到达的对象:6
发布于 2017-11-21 13:57:22
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 吧台 收集。 (“无法到达的对象:”,6) (“无法收集的对象:”,<main.Foo object at 0x10cff55d0>,<main.Bar object at 0x10cff5650>)
pyhton3.6
foo init 吧台 收集。 foo del 棒状模型 无法到达的对象:6 无法收藏的物品:[]
https://stackoverflow.com/questions/46997225
复制相似问题