diff --git a/Lib/test/test_buffer.py b/Lib/test/test_buffer.py
index 0976fa9..d921a5a 100644
--- a/Lib/test/test_buffer.py
+++ b/Lib/test/test_buffer.py
@@ -2462,6 +2462,21 @@
             self.assertEqual(m.tobytes(), b'')
             self.assertEqual(m.tolist(), [])
 
+    check_sizeof = support.check_sizeof
+
+    def test_memoryview_sizeof(self):
+        check = self.check_sizeof
+        vsize = support.calcvobjsize
+        base_struct = 'Pnin 2P2n2i5P P'
+        per_dim = '3n'
+
+        items = list(range(8))
+        check(memoryview(b''), vsize(base_struct + 1 * per_dim))
+        a = ndarray(items, shape=[2, 4], format="b")
+        check(memoryview(a), vsize(base_struct + 2 * per_dim))
+        a = ndarray(items, shape=[2, 2, 2], format="b")
+        check(memoryview(a), vsize(base_struct + 3 * per_dim))
+
     def test_memoryview_struct_module(self):
 
         class INT(object):
diff --git a/Lib/test/test_sys.py b/Lib/test/test_sys.py
index ed6b47d..dc241a6 100644
--- a/Lib/test/test_sys.py
+++ b/Lib/test/test_sys.py
@@ -846,6 +846,9 @@
             check(x, vsize('n2Pi') + x.__alloc__())
         # bytearray_iterator
         check(iter(bytearray()), size('nP'))
+        # bytes
+        check(b'', vsize('n') + 1)
+        check(b'x' * 10, vsize('n') + 11)
         # cell
         def get_cell():
             x = 42
@@ -965,8 +968,6 @@
         check(int(PyLong_BASE), vsize('') + 2*self.longdigit)
         check(int(PyLong_BASE**2-1), vsize('') + 2*self.longdigit)
         check(int(PyLong_BASE**2), vsize('') + 3*self.longdigit)
-        # memoryview
-        check(memoryview(b''), size('Pnin 2P2n2i5P Pn'))
         # module
         check(unittest, size('PnPPP'))
         # None
diff --git a/Misc/NEWS b/Misc/NEWS
index 2a5e4e9..d6b2583 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -10,6 +10,9 @@
 Core and Builtins
 -----------------
 
+- Issue #23629: Fix the default __sizeof__ implementation for variable-sized
+  objects.
+
 Library
 -------
 
diff --git a/Objects/bytesobject.c b/Objects/bytesobject.c
index b015974..2ceba48 100644
--- a/Objects/bytesobject.c
+++ b/Objects/bytesobject.c
@@ -3463,42 +3463,6 @@
     return NULL;
 }
 
-/*[clinic input]
-bytes.__sizeof__ as bytes_sizeof
-
-    self: self(type="PyBytesObject *")
-
-Returns the size of the bytes object in memory, in bytes.
-[clinic start generated code]*/
-
-PyDoc_STRVAR(bytes_sizeof__doc__,
-"__sizeof__($self, /)\n"
-"--\n"
-"\n"
-"Returns the size of the bytes object in memory, in bytes.");
-
-#define BYTES_SIZEOF_METHODDEF    \
-    {"__sizeof__", (PyCFunction)bytes_sizeof, METH_NOARGS, bytes_sizeof__doc__},
-
-static PyObject *
-bytes_sizeof_impl(PyBytesObject *self);
-
-static PyObject *
-bytes_sizeof(PyBytesObject *self, PyObject *Py_UNUSED(ignored))
-{
-    return bytes_sizeof_impl(self);
-}
-
-static PyObject *
-bytes_sizeof_impl(PyBytesObject *self)
-/*[clinic end generated code: output=44933279343f24ae input=bee4c64bb42078ed]*/
-{
-    Py_ssize_t res;
-    res = PyBytesObject_SIZE + Py_SIZE(self) * Py_TYPE(self)->tp_itemsize;
-    return PyLong_FromSsize_t(res);
-}
-
-
 static PyObject *
 bytes_getnewargs(PyBytesObject *v)
 {
@@ -3559,7 +3523,6 @@
     BYTES_TRANSLATE_METHODDEF
     {"upper", (PyCFunction)stringlib_upper, METH_NOARGS, _Py_upper__doc__},
     {"zfill", (PyCFunction)stringlib_zfill, METH_VARARGS, zfill__doc__},
-    BYTES_SIZEOF_METHODDEF
     {NULL,     NULL}                         /* sentinel */
 };
 
diff --git a/Objects/tupleobject.c b/Objects/tupleobject.c
index e45462b..7efa1a6 100644
--- a/Objects/tupleobject.c
+++ b/Objects/tupleobject.c
@@ -759,27 +759,15 @@
 
 }
 
-static PyObject *
-tuple_sizeof(PyTupleObject *self)
-{
-    Py_ssize_t res;
-
-    res = PyTuple_Type.tp_basicsize + Py_SIZE(self) * sizeof(PyObject *);
-    return PyLong_FromSsize_t(res);
-}
-
 PyDoc_STRVAR(index_doc,
 "T.index(value, [start, [stop]]) -> integer -- return first index of value.\n"
 "Raises ValueError if the value is not present."
 );
 PyDoc_STRVAR(count_doc,
 "T.count(value) -> integer -- return number of occurrences of value");
-PyDoc_STRVAR(sizeof_doc,
-"T.__sizeof__() -- size of T in memory, in bytes");
 
 static PyMethodDef tuple_methods[] = {
     {"__getnewargs__",          (PyCFunction)tuple_getnewargs,  METH_NOARGS},
-    {"__sizeof__",      (PyCFunction)tuple_sizeof, METH_NOARGS, sizeof_doc},
     {"index",           (PyCFunction)tupleindex,  METH_VARARGS, index_doc},
     {"count",           (PyCFunction)tuplecount,  METH_O, count_doc},
     {NULL,              NULL}           /* sentinel */
diff --git a/Objects/typeobject.c b/Objects/typeobject.c
index be53868..030dc1f 100644
--- a/Objects/typeobject.c
+++ b/Objects/typeobject.c
@@ -4276,7 +4276,7 @@
     res = 0;
     isize = self->ob_type->tp_itemsize;
     if (isize > 0)
-        res = Py_SIZE(self->ob_type) * isize;
+        res = Py_SIZE(self) * isize;
     res += self->ob_type->tp_basicsize;
 
     return PyLong_FromSsize_t(res);
