>>> 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>
3个回答
官方文档说了(这里),所以别用__del__,估计是历史遗留问题,所以在python的新版本里还留着。
用del删除变量,不代表.__del__被调用了。
SofaSofa数据科学社区DS面试题库 DS面经只要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面经
函数里调用后删除变量空间这些我都懂,你把代码分部运行下,不要多步一起运行
-
塔利班
2019-04-12 07:47
嗯,分开跑就出现了和你一样的情况了,我也不清楚了。不过看了Jiho链接的文档感觉是变量被删除但是实际空间没有被释放导致的。
-
sasa
2019-04-12 09:03
def __init__(self):
定义了一个对象被创建后的行为
def __del__(self):
定义了一个对象被销毁后的行为
SofaSofa数据科学社区DS面试题库 DS面经
你这个说了和没说差不多,而且del是即将被销毁的行为
-
塔利班
2019-04-12 07:48