python __del__ 求解释

  统计/机器学习 Python    浏览次数:133        分享
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个回答 
3

官方文档说了(这里),所以别用__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


  相关主题

map lambda if逗号报错,invalid syntax   1回答

数据变long python有stata类似的命令吗   0回答

pymongo多线程报错Address already in use   1回答

用python生成一个取值在a到b之间的随机矩阵   1回答

python里求累计和   2回答

from __future__ import division是什么意思   1回答

python里的continue是什么意思   2回答

python如何删除dict中的一个key?   1回答

获取DataFrame所占空间的大小   2回答

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

怎么让DataFrame按照某一列绝对值从小到按排列?   1回答

python怎么读取txt格式的数据文件?   1回答



回答问题时需要注意什么?

我们谢绝在回答前讲“生动”的故事。

我们谢绝“这么简单,你自己想”、“书上有的,你认真看”这类的回答;如果你认为对方的提问方式或者内容不妥,你可以直接忽略该问题,不用进行任何作答,甚至可以对该问题投反对票。

我们谢绝答非所问。

我们谢绝自己不会、硬要回答。

我们感激每一个用户在编写答案时的努力与付出!