Issue 7410: deepcopy of itertools.count resets the count
diff --git a/Modules/itertoolsmodule.c b/Modules/itertoolsmodule.c
index 1a0d44d..6b5c249 100644
--- a/Modules/itertoolsmodule.c
+++ b/Modules/itertoolsmodule.c
@@ -3375,6 +3375,21 @@
 	return result;
 }
 
+static PyObject *
+count_reduce(countobject *lz)
+{
+	if (lz->cnt == PY_SSIZE_T_MAX)
+		return Py_BuildValue("O(O)", Py_TYPE(lz), lz->long_cnt);
+	return Py_BuildValue("O(n)", Py_TYPE(lz), lz->cnt);
+}
+
+PyDoc_STRVAR(count_reduce_doc, "Return state information for pickling.");
+
+static PyMethodDef count_methods[] = {
+	{"__reduce__",	(PyCFunction)count_reduce,	METH_NOARGS,
+	 count_reduce_doc},
+};
+
 PyDoc_STRVAR(count_doc,
 			 "count(start=0, step=1]) --> count object\n\
 \n\
@@ -3416,7 +3431,7 @@
 	0,				/* tp_weaklistoffset */
 	PyObject_SelfIter,		/* tp_iter */
 	(iternextfunc)count_next,	/* tp_iternext */
-	0,				/* tp_methods */
+	count_methods,				/* tp_methods */
 	0,				/* tp_members */
 	0,				/* tp_getset */
 	0,				/* tp_base */