Restored revision 2.87.
diff --git a/Objects/tupleobject.c b/Objects/tupleobject.c
index a5e37b0..159dc44 100644
--- a/Objects/tupleobject.c
+++ b/Objects/tupleobject.c
@@ -27,7 +27,7 @@
 PyTuple_New(register int size)
 {
 	register PyTupleObject *op;
-
+	int i;
 	if (size < 0) {
 		PyErr_BadInternalCall();
 		return NULL;
@@ -68,8 +68,9 @@
 		op = PyObject_GC_NewVar(PyTupleObject, &PyTuple_Type, size);
 		if (op == NULL)
 			return NULL;
-		memset(op->ob_item, 0, size*sizeof(PyObject*));
 	}
+	for (i=0; i < size; i++)
+		op->ob_item[i] = NULL;
 #if MAXSAVESIZE > 0
 	if (size == 0) {
 		free_tuples[0] = op;
@@ -164,27 +165,19 @@
 	Py_TRASHCAN_SAFE_BEGIN(op)
 	if (len > 0) {
 		i = len;
+		while (--i >= 0)
+			Py_XDECREF(op->ob_item[i]);
 #if MAXSAVESIZE > 0
 		if (len < MAXSAVESIZE &&
 		    num_free_tuples[len] < MAXSAVEDTUPLES &&
 		    op->ob_type == &PyTuple_Type)
 		{
-			while (--i >= 0) {
-				PyObject* o = op->ob_item[i];
-				if (o != NULL) {
-					op->ob_item[i] = NULL;
-					Py_DECREF(o);
-				}
-			}
 			op->ob_item[0] = (PyObject *) free_tuples[len];
 			num_free_tuples[len]++;
 			free_tuples[len] = op;
 			goto done; /* return */
 		}
-		else
 #endif
-			while (--i >= 0)
-				Py_XDECREF(op->ob_item[i]);
 	}
 	op->ob_type->tp_free((PyObject *)op);
 done: