title: Pypy memory usage increases when nothing new is allocated
body: <p>I'm not sure if this is a duplicate of the other PyPy memory questions, but here I'll provide a concrete example.</p>
  
  <pre><code>from __future__ import division
  
  def mul_inv(a, m):
      """Modular multiplicative inverse, a^-1 mod m. Credit: rosettacode.org"""
      m0 = m
      x0, x1 = 0, 1
      if m == 1: return 1
      while a &gt; 1:
          assert m != 0, "a and m must be coprime"
          q = a // m
          a, m = m, a%m
          x0, x1 = x1 - q * x0, x0
      if x1 &lt; 0: x1 += m0
      return x1
  
  
  M = 1000000009
  L = 10**8
  
  bin2 = [0] * L
  bin2[0] = 1
  for n in range(L-1):
      bin2[n+1] = (bin2[n] * (4*n + 2) * mul_inv(n+1, M)) % M
      if n % 10**5 == 0: print(n, bin2[n])
  
  print(bin2[:20])
  </code></pre>
  
  <p>With python 3.6, the program uses 3-4 GB at most and runs to completion (Armin Rigo's list change doesn't change this significantly). With python 2.7.13 running PyPy 5.10.0, the program reaches 8 GB (how much RAM I have) quickly and freezes. Even with <code>gc.collect()</code> calls the program runs out of memory when <code>n</code> is about 3.5 * 10^7. </p>
  
  <p>Where is this memory usage coming from? The only large memory usage should be initializing <code>bin2</code> as a 10^8 int list. Nothing else should be increasing the memory usage, under the assumption that all the local variables in <code>mul_inv</code> are garbage collected. </p>