[Tutor] Python __del__ method
Jia Yue Kee
JiaYue.Kee at firstsolar.com
Tue Jul 11 10:47:05 EDT 2017
Hi All,
I am new to Python and I came across the Python __del__ method the other day and I have some doubts on the output of the following code.
So, the snippet code goes something like this:
class Robot():
def __init__(self, name):
print(name + " has been created!")
def __del__(self):
print ("Robot has been destroyed")
if __name__ == "__main__":
x = Robot("Tik-Tok")
y = Robot("Jenkins")
z = x
z
x
del x
del z
del y
Case 1: If I were to run the code in "Script Mode", the following output will be obtained:
Tik-Tok has been created!
Jenkins has been created!
Robot has been destroyed
Robot has been destroyed
Case 2: If I were to run the code in "Interactive Mode", the following output will be obtained:
>>> x = Robot("Tik-Tok")
Tik-Tok has been created!
>>> y = Robot("Jenkins")
Jenkins has been created!
>>> z = x
>>> z
<__main__.Robot object at 0x02D7E910>
>>> x
<__main__.Robot object at 0x02D7E910>
>>> del x
>>> del z
>>> del y
Robot has been destroyed
My question being why is that "Robot has been destroyed" is only printed once in Case 2 (interactive mode) while it is printed out twice in Case 1 (script mode)?
I did some study on garbage collection and based on my understanding, after the del x and del z statements, the refcount to the Robot object should reach zero and subsequently triggers the __del__ method right?
I am hoping someone could provide me a clearer picture on the doubts I have in mind.
Thanks and Regards,
JY
More information about the Tutor
mailing list