Issue #14930: Make memoryview objects weakrefable.
diff --git a/Objects/memoryobject.c b/Objects/memoryobject.c
index 67f7e01..62427d4 100644
--- a/Objects/memoryobject.c
+++ b/Objects/memoryobject.c
@@ -595,6 +595,7 @@
     mv->view.shape = mv->ob_array;
     mv->view.strides = mv->ob_array + ndim;
     mv->view.suboffsets = mv->ob_array + 2 * ndim;
+    mv->weakreflist = NULL;
 
     _PyObject_GC_TRACK(mv);
     return mv;
@@ -969,6 +970,8 @@
     _PyObject_GC_UNTRACK(self);
     (void)_memory_release(self);
     Py_CLEAR(self->mbuf);
+    if (self->weakreflist != NULL)
+        PyObject_ClearWeakRefs((PyObject *) self);
     PyObject_GC_Del(self);
 }
 
@@ -2608,7 +2611,7 @@
     (traverseproc)memory_traverse,            /* tp_traverse */
     (inquiry)memory_clear,                    /* tp_clear */
     memory_richcompare,                       /* tp_richcompare */
-    0,                                        /* tp_weaklistoffset */
+    offsetof(PyMemoryViewObject, weakreflist),/* tp_weaklistoffset */
     0,                                        /* tp_iter */
     0,                                        /* tp_iternext */
     memory_methods,                           /* tp_methods */