[PyQt] deleteLater vs setParent(None)

Elvis Stansvik elvstone at gmail.com
Wed May 11 12:13:55 BST 2016

2016-05-11 10:38 GMT+02:00 Phil Thompson <phil at riverbankcomputing.com>:
> On 11 May 2016, at 8:24 am, Elvis Stansvik <elvstone at gmail.com> wrote:
>> 2016-05-10 18:42 GMT+02:00 Dave Gradwell <davegradwell at yahoo.co.uk>:
>>> Hi Elvis,
>>> I’m doing something similar which works for me in production if that helps at all.
>>> I preferred the explicitness of deleteLater, although I think either technique would work?
>>> Best, Dave.
>> Thanks a lot for sharing your code Dave, looks very similar indeed. I
>> also like the explicitness of deleteLater better.
>> The reason I asked is precisely this wording by Phil:
>> "Changing the ownership also removes that extra reference so that the
>> object is available to be garbage collected when it goes out of
>> scope."
>> I'm not sure if that means deleteLater will not be effective because
>> of this extra reference that PyQt keeps or not? But thinking about it
>> a bit more, it probably will be effective, since I guess if the object
>> is deleted on the C++ side (deleteLater), and PyQt discovers that the
>> only reference is its own, then it will let go of that reference to
>> let Python object be garbage collected?
>> Phil, would you care to comment on this? I realize I don't have a full
>> understanding of how this all works yet.
>> My goal is to not accumulate memory in this slot, so I'd like both the
>> underlying QProcess object to be cleaned up, as well as any Python
>> instances of my subclass Process.
> With setParent() you are manipulating the Python side of things - getting the garbage collector to do the work.
> With deleteLater() you are manipulating the C++ side of things - PyQt reacts when the C++ instance is destroyed.
> Bugs aside both should achieve the same thing - but at different times. Personally I always use deleteLater().

Thanks for the clarification! I'll stick with deleteLater().


> Phil

More information about the PyQt mailing list