New submission from Josh Rosenberg <[email protected]>:
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.
----------
components: Library (Lib)
keywords: 3.7regression, easy
messages: 333338
nosy: Nir Soffer, josh.r, serhiy.storchaka, taleinat, vstinner, wbolster
priority: release blocker
severity: normal
stage: needs patch
status: open
title: 3.8 needlessly breaks weak references for UUIDs
type: behavior
versions: Python 3.8
_______________________________________
Python tracker <[email protected]>
<https://bugs.python.org/issue35701>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe:
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com