New submission from Josh Rosenberg <shadowranger+pyt...@gmail.com>:

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 <rep...@bugs.python.org>
<https://bugs.python.org/issue35701>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to