What Del Actually Deletes

CPython manages memory with reference counting: every object carries a count of how many references point to it, and CPython deallocates the object the instant that count reaches zero.

class Loud:
    def __del__(self):
        print("destroyed")

a = Loud()
b = a
del a
print("after del a")
del b
print("after del b")

What does this print, in order?

A

after del a
after del b
("destroyed" never prints)

B
destroyed
after del a
after del b
C
after del a
destroyed
after del b
D
after del a
after del b
destroyed