Am 10.12.2019 22:33 schrieb Paul Moore:

You do understand that the reference counting garbage collector is an
implementation detail of the CPython implementation *only*, don't you?

I don't think that's true. Here's a sentonce from near the top of the "gc" module documentation of Python 3:
https://docs.python.org/3/library/gc.html#module-gc

"Since the collector supplements the reference counting already used in Python, you can disable the collector if you are sure your program does not create reference cycles."

The way I read this is that Python automatically and immediately deletes objects once their refcount goes to zero, and the garbage collector only kicks in case of circular references or other obscure circumstances. The documentation makes no reference to the specific Python implementation, so I believe this is true for CPython as well as others.

To be specific: Within the semantics of the Python documentation, freeing the resources used by an object by explicitly or implicitly using "del" is not garbage collection. Python garbage collection is like street cleaning in real life: If everybody looked after their own trash, we wouldn't need a municipal service to do it.

When I first read about the Python garbage collector I was puzzled at the possibility of disabling it, thinking that over time a long-running program would fill all memory because no object's resources would ever be freed. But that is clearly not the case. Even Instagram can live without garbage collecton (although if you look how much garbage is on Instagram, maybe they should re-enable it):

https://instagram-engineering.com/dismissing-python-garbage-collection-at-instagram-4dca40b29172

The (implementation independent) language semantics makes no assertion
about what form of garbage collection is used, and under other garbage
collectors, there can be an indefinite delay between the last
reference to a value being lost and the object being collected (which
is when __del__ gets called).

Only when there are circular references. Otherwise every Python implementation will delete objects once their refcount goes to zero, wven when there is no garbage collection at all, see the doc.

There is not even a guarantee that CPython will retain the reference counting GC in future versions.

There is no "reference counting GC" in Python. Freeing objects based on their reference count going to zero happens independently of the GC, see the official docs quoted above.


--
https://mail.python.org/mailman/listinfo/python-list

Reply via email to