Make weak references subclassable:
- weakref.ref and weakref.ReferenceType will become aliases for each
other
- weakref.ref will be a modern, new-style class with proper __new__
and __init__ methods
- weakref.WeakValueDictionary will have a lighter memory footprint,
using a new weakref.ref subclass to associate the key with the
value, allowing us to have only a single object of overhead for each
dictionary entry (currently, there are 3 objects of overhead per
entry: a weakref to the value, a weakref to the dictionary, and a
function object used as a weakref callback; the weakref to the
dictionary could be avoided without this change)
- a new macro, PyWeakref_CheckRefExact(), will be added
- PyWeakref_CheckRef() will check for subclasses of weakref.ref
This closes SF patch #983019.
diff --git a/Misc/NEWS b/Misc/NEWS
index 42c4e67..c30f2a9 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -12,6 +12,11 @@
Core and builtins
-----------------
+- weakref.ref is now the type object also known as
+ weakref.ReferenceType; it can be subclassed like any other new-style
+ class. There's less per-entry overhead in WeakValueDictionary
+ objects now (one object instead of three).
+
- Bug #951851: Python crashed when reading import table of certain
Windows DLLs.