Object destruction delayed on interactive prompt
MRAB
python at mrabarnett.plus.com
Sun Jan 25 14:13:23 EST 2015
On 2015-01-25 18:23, Mario Figueiredo wrote:
> Consider the following class:
>
> class A:
> def __init__(self, value):
> self.value = value
>
> def __del__(self):
> print("'A' instance being collected...")
>
> def __repr__(self):
> return str(self.value)
>
> If ran as a script, the destructor behavior works as expected:
>
> if __name__ == '__main__':
> x1 = A(12)
> print(x1) # __repr__()
> x1 = 2 # __del__()
> print(x1)
>
> But if I run it interactively, a weird behavior comes up:
>
> >>> x1 = A(12)
> >>> x1 = 'string'
> A instance being collected... # __del__() as expected
> >>> x1 = A(12) # Recreate x1
> >>> x1 # __repr__()
> 12
> >>> x1 = 'string' # __del__() isn't executed!
> >>> x1 # it is delayed until here
> A instance being collected...
> 'string'
>
> This is reproducible in IDLE and at the system command prompt. Is this a
> REPL specific behavior?
>
In the REPL, the result of an expression is bound to '_':
>>> x1 = A(12)
>>> x1 # _ will be bound to the result.
12
>>> x1 = 'string'
>>> # At this point, _ is still bound to the object.
>>> 0 # This will bind _ to another object, so the previous object can
be collected.
'A' instance being collected...
0
More information about the Python-list
mailing list