python __del__ 求解释

  统计/机器学习 Python    浏览次数:3767        分享
0


>>> class C:
        def __init__(self):
                print("我是__init__")
        def __del__(self):
                print("我是__del__")

                
>>> c1 = C()
我是__init__
>>> c2=c1
>>> del c2
>>> del c1
我是__del__
>>> c3=C()
我是__init__
>>> c3
<__main__.C object at 0x0000000002FB8B00>
>>> c4=c3
>>> del c4
>>> del c3
>>> c5=C()
我是__init__
>>> c5
我是__del__
<__main__.C object at 0x0000000002F71630>


 

塔利班   2019-04-11 19:32



   3个回答 
5

官方文档说了(这里),所以别用__del__,估计是历史遗留问题,所以在python的新版本里还留着。

用del删除变量,不代表.__del__被调用了。

SofaSofa数据科学社区DS面试题库 DS面经

Jiho   2019-04-12 08:22

1

只要C类object被删除,就会触发__del__(self)。

你的代码里面del c2,并没有触发,因为c2只是指向了c1,而不是一个真正的object。而删除c1的时候触发了__del__(self),所以print生效。

你后面的代码在我电脑上并没有实现出来。我的结果如下:

我再给你一个例子

class C:
    def __init__(self):
            print("here __init__")
    def __del__(self):
            print("here __del__")
            
def Test(val):
    a = C()
    return val

x = Test(3)

在Test函数中,a被创建,因为是临时变量而且没有被return,所以函数调用之后,a就被自动消灭了。

所以你看的结果应该是

here __init__
here __del__
SofaSofa数据科学社区DS面试题库 DS面经

sasa   2019-04-12 06:05

函数里调用后删除变量空间这些我都懂,你把代码分部运行下,不要多步一起运行 - 塔利班   2019-04-12 07:47
嗯,分开跑就出现了和你一样的情况了,我也不清楚了。不过看了Jiho链接的文档感觉是变量被删除但是实际空间没有被释放导致的。 - sasa   2019-04-12 09:03
0


def __init__(self):

定义了一个对象被创建后的行为

def __del__(self):

定义了一个对象被销毁后的行为

SofaSofa数据科学社区DS面试题库 DS面经

u_u   2019-04-11 22:47

你这个说了和没说差不多,而且del是即将被销毁的行为 - 塔利班   2019-04-12 07:48


  相关讨论

python怎么往集合里增加元素(类似append)?

python里有没有类似excel里的那种数据透视表?

python里的cdef是什么?

对tuple的元素赋值时报错:'tuple' object does not support item assignment

东方财富的数据怎么爬下来

python里的TYPE_CHECKING是什么作用?

我def了两个参数 但是给2个却报错

怎么利用python批量替换多个txt文件中的文字片段?

怎么对有多个空格的字符串进行split?

python里清除已经定义过的变量

  随便看看

K-means怎么选K?

如何度量一个分布长尾的程度?

pandas.DataFrame选取最后k行

激活函数RELU在0点的导数是多少?

opencv里waitkey和destroyAllWindows有什么用?