[Python-Dev] tp_finalize vs tp_del sematics
Valentine Sinitsyn
valentine.sinitsyn at gmail.com
Mon Aug 24 20:43:25 CEST 2015
Hi Armin,
Thanks for replying.
On 23.08.2015 17:14, Armin Rigo wrote:
> Hi Valentine,
>
> On 19 August 2015 at 09:53, Valentine Sinitsyn
> <valentine.sinitsyn at gmail.com> wrote:
>> why it wasn't possible to
>> implement proposed CI disposal scheme on top of tp_del?
>
> I'm replying here as best as I understand the situation, which might
> be incomplete or wrong.
>
> From the point of view of someone writing a C extension module, both
> tp_del and tp_finalize are called with the same guarantee that the
> object is still valid at that point. The difference is only that the
> presence of tp_del prevents the object from being collected at all if
> it is part of a cycle. Maybe the same could have been done without
> duplicating the function pointer (tp_del + tp_finalize) with a
> Py_TPFLAGS_DEL_EVEN_IN_A_CYCLE.
So you mean that this was to keep things backwards compatible for
third-party extensions? I haven't thought about it this way, but this
makes sense. However, the behavior of Python code using objects with
__del__ has changed nevertheless: they are collectible now, and __del__
is always called exactly once, if I understand everything correctly.
Thanks,
Valentine
More information about the Python-Dev
mailing list