However, Python only initializes default parameters when the function is first evaluated, which means that the same list is used for every call to the function. As a result, if you mutate those values, the mutations span across invocations.
In this case, user ids and names were appended to the default lists each time it was called. Over hours, those lists began to retrieve tens of thousands of users on each request, overwhelming even the memcache clusters.
A good reminder that a full team of engineers can fail miserably at investigating a 101 Python course problem. I did that too, I probably will again. I should collect and publish my own post mortem mistakes, as James Bennett did (cache).