How to delete an instantiated object Python?

I am relatively new to object oriented programming and I cannot figure out how to delete an instantiated object in Python.

if self.hit_paddle(pos) == True or self.hit_paddle2(pos) == True:
    bar = bar + 1
if bar == 1:
    global barbox1
    barbox1 = barfill(canvas)
    barbox1.canvas.move(barbox1.id, 253, 367)
if bar == 2:
    global barbox2
    barbox2 = barfill(canvas)
    barbox2.canvas.move(barbox5.id, 413, 367)
    bar = 0
    time.sleep(0.2)
    barbox1 = None
    barbox2 = None

That is the code, the main thing I was trying in order to delete the objects was barbox1 = None, but that doesn't seem to work.


Solution 1:

object.__del__(self) is called when the instance is about to be destroyed.

>>> class Test:
...     def __del__(self):
...         print "deleted"
... 
>>> test = Test()
>>> del test
deleted

Object is not deleted unless all of its references are removed(As quoted by ethan)

Also, From Python official doc reference:

del x doesn’t directly call x.__del__() — the former decrements the reference count for x by one, and the latter is only called when x‘s reference count reaches zero

Solution 2:

What do you mean by delete? In Python, removing a reference (or a name) can be done with the del keyword, but if there are other names to the same object that object will not be deleted.

--> test = 3
--> print(test)
3
--> del test
--> print(test)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'test' is not defined

compared to:

--> test = 5
--> other is test  # check that both name refer to the exact same object
True
--> del test       # gets rid of test, but the object is still referenced by other
--> print(other)
5