Author josh.r
Recipients Nir Soffer, josh.r, serhiy.storchaka, taleinat, vstinner, wbolster
Date 2019-01-09.17:37:04
SpamBayes Score -1.0
Marked as misclassified Yes
Message-id <1547055424.22.0.868480715167.issue35701@roundup.psfhosted.org>
In-reply-to
Content
I 100% agree with the aim of #30977 (reduce uuid.UUID() memory footprint), but it broke compatibility for any application that was weak referencing UUID instances (which seems a reasonable thing to do; a strong reference to a UUID can be stored in a single master container or passed through a processing pipeline, while also keying WeakKeyDictionary with cached supplementary data). I specifically noticed this because I was about to do that very thing in a processing flow, then noticed UUIDs in 3.6 were a bit heavyweight, memory-wise, went to file a bug on memory usage to add __slots__, and discovered someone had already done it for me.

Rather than break compatibility in 3.8, why not simply include '__weakref__' in the __slots__ listing? It would also remove the need for a What's New level description of the change, since the description informs people that:

1. Instances can no longer be weak-referenced (which adding __weakref__ would undp)
2. Instances can no longer add arbitrary attributes. (which was already the case in terms of documented API, programmatically enforced via a __setattr__ override, so it seems an unnecessary thing to highlight outside of Misc/NEWS)

The cost of changing __slots__ from:

    __slots__ = ('int', 'is_safe')

to:

    __slots__ = 'int', 'is_safe', '__weakref__'

would only be 4-8 bytes (for 64 bit Python, total cost of object + int would go from 100 to 108 bytes, still about half of the pre-__slots__ cost of 212 bytes), and avoid breaking any code that might rely on being able to weak reference UUIDs.

I've marked this as release blocker for the time being because if 3.8 actually releases with this change, it will cause back compat issues that might prevent people relying on UUID weak references from upgrading their code.
History
Date User Action Args
2019-01-09 17:37:07josh.rsetrecipients: + josh.r, vstinner, taleinat, serhiy.storchaka, wbolster, Nir Soffer
2019-01-09 17:37:04josh.rsetmessageid: <1547055424.22.0.868480715167.issue35701@roundup.psfhosted.org>
2019-01-09 17:37:04josh.rlinkissue35701 messages
2019-01-09 17:37:04josh.rcreate