Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Which objects are not destroyed upon Python interpreter exit?

According to Python documentation:

It is not guaranteed that __del__() methods are called for objects that still exist when the interpreter exits.

I know that in older versions of Python cyclic referencing would be one of the examples for this behaviour, however as I understand it, in Python 3 such cycles will successfully be destroyed upon interpreter exit.

I'm wondering what are the cases (as close to exhaustive list as possible) when the interpreter would not destroy an object upon exit.

like image 777
Alex Avatar asked Dec 17 '25 18:12

Alex


1 Answers

All examples are implementation details - Python does not promise whether or not it will call __del__ for any particular objects on interpreter exit. That said, one of the simplest examples is with daemon threads:

import threading
import time

def target():
    time.sleep(1000)

class HasADel:
    def __del__(self):
        print('del')

x = HasADel()

threading.Thread(target=target, daemon=True).start()

Here, the daemon thread prevents the HasADel instance from being garbage collected on interpreter shutdown. The daemon thread doesn't actually do anything with that object, but Python can't clean up references the daemon thread owns, and x is reachable from references the daemon thread owns.

like image 191
user2357112 supports Monica Avatar answered Dec 19 '25 09:12

user2357112 supports Monica



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!