On 02 January 2003, Aahz said:
Because garbage cycles can point at non-garbage; when the garbage is reclaimed, __del__() methods will run. You could argue that this is another reason against using __del__(), but since this is part of the way CPython works, I'm documenting it in my book.
As I recall (and this knowledge dates back to 1997 or so, so could well be obsolete), Perl does a full GC run at process exit time. In normal contexts this is irrelevant; I believe the justification was to clean up resources used by an embedded interpreter.