RFC: Proposal: Deterministic Object Destruction
Steven D'Aprano
steve+comp.lang.python at pearwood.info
Wed Feb 28 23:23:44 EST 2018
On Wed, 28 Feb 2018 18:46:05 -0800, Rick Johnson wrote:
> On Wednesday, February 28, 2018 at 5:02:17 PM UTC-6, Chris Angelico
> wrote:
>
>> Here's one example: reference cycles. When do they get detected? Taking
>> a really simple situation:
>>
>> class Foo:
>> def __init__(self):
>> self.self = self
>
> *shudders*
>
> Can you provide a real world example in which you need an object which
> circularly references _itself_? This looks like a highly contrived
> example used to (1) merely win the argument, and (2) Bump fib() up one
> position from it's current position as "the worst introductory example
> of how to write a function in the history of programming tutorials"
Of course it is a contrived example: it is close to the simplest possible
example of a reference cycle. Its not intended as an example of useful
code.
(Useful or not, your interpreter better not crash when faced with a cycle
like this.)
But of course there are uses for objects to hold a reference to
themselves. If you're writing a general purpose collection (say, a list
or dict) then you better be able to cope with the case that somebody puts
your list in itself:
L = []
L.append(L)
either directly, as above, or indirectly.
And that's the point really: cycles don't just occur when an object holds
a reference to itself. They occur when one object holds a reference to
another object, which holds a reference to a third, which holds a
reference to a fourth (and so on...), which eventually holds a reference
to the original again.
Cycles are useful. For example, you might think of a window which holds a
reference to a control, which in turn needs a reference to its owning
window. Or a network which contains loops, say a network of streets, or
networks of disease transmission (I caught the stomach bug from Bob, who
caught it from Sally, who caught it from Georgina, who originally caught
it from me the *first* time I had it).
It shouldn't take much imagination to think of cycles in real life which
you may want to model in a program.
https://en.wikipedia.org/wiki/I'm_My_Own_Grandpa
--
Steve
More information about the Python-list
mailing list