[3.9] bpo-41052: Opt out serialization/deserialization for _random.Random (GH-21002). (GH-21030)

(cherry picked from commit 6989af0bc7ea1e9a1acea16794e6f723d7b44110)

Co-authored-by: Dong-hee Na <donghee.na92@gmail.com>
diff --git a/Modules/_randommodule.c b/Modules/_randommodule.c
index 3589173..1b01491 100644
--- a/Modules/_randommodule.c
+++ b/Modules/_randommodule.c
@@ -536,12 +536,30 @@
     return (PyObject *)self;
 }
 
+
+/*[clinic input]
+
+_random.Random.__reduce__
+
+[clinic start generated code]*/
+
+static PyObject *
+_random_Random___reduce___impl(RandomObject *self)
+/*[clinic end generated code: output=ddea0dcdb60ffd6d input=bd38ec35fd157e0f]*/
+{
+    PyErr_Format(PyExc_TypeError,
+                 "cannot pickle %s object",
+                 Py_TYPE(self)->tp_name);
+    return NULL;
+}
+
 static PyMethodDef random_methods[] = {
     _RANDOM_RANDOM_RANDOM_METHODDEF
     _RANDOM_RANDOM_SEED_METHODDEF
     _RANDOM_RANDOM_GETSTATE_METHODDEF
     _RANDOM_RANDOM_SETSTATE_METHODDEF
     _RANDOM_RANDOM_GETRANDBITS_METHODDEF
+    _RANDOM_RANDOM___REDUCE___METHODDEF
     {NULL,              NULL}           /* sentinel */
 };
 
diff --git a/Modules/clinic/_randommodule.c.h b/Modules/clinic/_randommodule.c.h
index a467811..0a642df 100644
--- a/Modules/clinic/_randommodule.c.h
+++ b/Modules/clinic/_randommodule.c.h
@@ -114,4 +114,21 @@
 exit:
     return return_value;
 }
-/*[clinic end generated code: output=a7feb0c9c8d1b627 input=a9049054013a1b77]*/
+
+PyDoc_STRVAR(_random_Random___reduce____doc__,
+"__reduce__($self, /)\n"
+"--\n"
+"\n");
+
+#define _RANDOM_RANDOM___REDUCE___METHODDEF    \
+    {"__reduce__", (PyCFunction)_random_Random___reduce__, METH_NOARGS, _random_Random___reduce____doc__},
+
+static PyObject *
+_random_Random___reduce___impl(RandomObject *self);
+
+static PyObject *
+_random_Random___reduce__(RandomObject *self, PyObject *Py_UNUSED(ignored))
+{
+    return _random_Random___reduce___impl(self);
+}
+/*[clinic end generated code: output=d8a99be3f1192219 input=a9049054013a1b77]*/