首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PEP 442,带有__del__()方法的对象不再以gc.garbage结束

PEP 442,带有__del__()方法的对象不再以gc.garbage结束
EN

Stack Overflow用户
提问于 2017-10-29 05:49:20
回答 1查看 159关注 0票数 0

使用__del__方法收集循环。(第442页)

但是为什么我得到了同样的结果呢?

a,b,foo,bar被释放了吗?

代码语言:javascript
复制
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__方法时,我得到了相同的结果

代码语言:javascript
复制
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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-11-21 13:57:22

Gc.collect:

返回不可访问对象的数目。

gc.garbage:

收集器发现无法到达但无法释放的对象列表(无法收集的对象)。

代码语言:javascript
复制
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 无法收藏的物品:[]

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

https://stackoverflow.com/questions/46997225

复制
相关文章

相似问题

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