diff --git a/Include/object.h b/Include/object.h
index 258b074..fd7c235 100644
--- a/Include/object.h
+++ b/Include/object.h
@@ -667,6 +667,11 @@
 #define Py_GT 4
 #define Py_GE 5
 
+/* Maps Py_LT to Py_GT, ..., Py_GE to Py_LE.
+ * Defined in object.c.
+ */
+PyAPI_DATA(int) _Py_SwappedOp[];
+
 /*
 Define staticforward and statichere for source compatibility with old
 C extensions.
diff --git a/Objects/classobject.c b/Objects/classobject.c
index bdbcd6a..506faab 100644
--- a/Objects/classobject.c
+++ b/Objects/classobject.c
@@ -1873,9 +1873,6 @@
 	return res;
 }
 
-/* Map rich comparison operators to their swapped version, e.g. LT --> GT */
-static int swapped_op[] = {Py_GT, Py_GE, Py_EQ, Py_NE, Py_LT, Py_LE};
-
 static PyObject *
 instance_richcompare(PyObject *v, PyObject *w, int op)
 {
@@ -1889,7 +1886,7 @@
 	}
 
 	if (PyInstance_Check(w)) {
-		res = half_richcompare(w, v, swapped_op[op]);
+		res = half_richcompare(w, v, _Py_SwappedOp[op]);
 		if (res != Py_NotImplemented)
 			return res;
 		Py_DECREF(res);
diff --git a/Objects/object.c b/Objects/object.c
index 721a6ac..b28420d 100644
--- a/Objects/object.c
+++ b/Objects/object.c
@@ -476,7 +476,7 @@
                          ? (t)->tp_richcompare : NULL)
 
 /* Map rich comparison operators to their swapped version, e.g. LT --> GT */
-static int swapped_op[] = {Py_GT, Py_GE, Py_EQ, Py_NE, Py_LT, Py_LE};
+extern int _Py_SwappedOp[] = {Py_GT, Py_GE, Py_EQ, Py_NE, Py_LT, Py_LE};
 
 /* Try a genuine rich comparison, returning an object.  Return:
    NULL for exception;
@@ -494,7 +494,7 @@
 	if (v->ob_type != w->ob_type &&
 	    PyType_IsSubtype(w->ob_type, v->ob_type) &&
 	    (f = RICHCOMPARE(w->ob_type)) != NULL) {
-		res = (*f)(w, v, swapped_op[op]);
+		res = (*f)(w, v, _Py_SwappedOp[op]);
 		if (res != Py_NotImplemented)
 			return res;
 		Py_DECREF(res);
@@ -506,7 +506,7 @@
 		Py_DECREF(res);
 	}
 	if ((f = RICHCOMPARE(w->ob_type)) != NULL) {
-		return (*f)(w, v, swapped_op[op]);
+		return (*f)(w, v, _Py_SwappedOp[op]);
 	}
 	res = Py_NotImplemented;
 	Py_INCREF(res);
@@ -1703,7 +1703,7 @@
 
 	assert(result);
 	if (!PyList_Check(result)) {
-		PyErr_SetString(PyExc_TypeError, 
+		PyErr_SetString(PyExc_TypeError,
 			"Expected keys() to be a list.");
 		goto error;
 	}
diff --git a/Objects/typeobject.c b/Objects/typeobject.c
index 6f5323e..600dca5 100644
--- a/Objects/typeobject.c
+++ b/Objects/typeobject.c
@@ -4638,9 +4638,6 @@
 	return res;
 }
 
-/* Map rich comparison operators to their swapped version, e.g. LT --> GT */
-static int swapped_op[] = {Py_GT, Py_GE, Py_EQ, Py_NE, Py_LT, Py_LE};
-
 static PyObject *
 slot_tp_richcompare(PyObject *self, PyObject *other, int op)
 {
@@ -4653,7 +4650,7 @@
 		Py_DECREF(res);
 	}
 	if (other->ob_type->tp_richcompare == slot_tp_richcompare) {
-		res = half_richcompare(other, self, swapped_op[op]);
+		res = half_richcompare(other, self, _Py_SwappedOp[op]);
 		if (res != Py_NotImplemented) {
 			return res;
 		}
