python __del__ 求解释

  统计/机器学习 Python    浏览次数:837        分享
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


  相关主题

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

Jupiter notebook中显示一个dataframe所有的列   2回答

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

有一个1000万行的dataframe   3回答

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

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

怎么用python生成一个二维码,扫码跳转到一个指定的网页?   1回答

python倒序的range   1回答

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

gc.collect()返回值是什么意思   1回答

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

求多个torch tensor的平均值   1回答



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

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

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

我们谢绝答非所问。

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

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