Sigh.  That wasn't a memory leak, that was Guido committing before
running tests.  Withdraw 2.183 and its backport.
diff --git a/Objects/typeobject.c b/Objects/typeobject.c
index cc60d6c..ed5b829 100644
--- a/Objects/typeobject.c
+++ b/Objects/typeobject.c
@@ -2468,11 +2468,8 @@
 	while (--i >= 0) {
 		ref = PyList_GET_ITEM(list, i);
 		assert(PyWeakref_CheckRef(ref));
-		if (PyWeakref_GET_OBJECT(ref) == Py_None) {
-			i = PyList_SetItem(list, i, new);
-			Py_DECREF(new);
-			return i;
-		}
+		if (PyWeakref_GET_OBJECT(ref) == Py_None)
+			return PyList_SetItem(list, i, new);
 	}
 	i = PyList_Append(list, new);
 	Py_DECREF(new);