title: timeit and its default_timer completely disagree
body: <p>I benchmarked these two functions (they unzip pairs back into source lists, came from <a href="https://stackoverflow.com/a/63753217/13008439">here</a>):</p>
  <pre><code>n = 10**7
  a = list(range(n))
  b = list(range(n))
  pairs = list(zip(a, b))
  
  def f1(a, b, pairs):
      a[:], b[:] = zip(*pairs)
  
  def f2(a, b, pairs):
      for i, (a[i], b[i]) in enumerate(pairs):
          pass
  </code></pre>
  <p>Results with <code>timeit.timeit</code> (five rounds, numbers are seconds):</p>
  <pre><code>f1 1.06   f2 1.57   
  f1 0.96   f2 1.69   
  f1 1.00   f2 1.85   
  f1 1.11   f2 1.64   
  f1 0.95   f2 1.63   
  </code></pre>
  <p>So clearly <code>f1</code> is a lot faster than <code>f2</code>, right?</p>
  <p>But then I also measured with <code>timeit.default_timer</code> and got a completely different picture:</p>
  <pre><code>f1 7.28   f2 1.92   
  f1 5.34   f2 1.66   
  f1 6.46   f2 1.70   
  f1 6.82   f2 1.59   
  f1 5.88   f2 1.63   
  </code></pre>
  <p>So clearly <code>f2</code> is a lot faster, right?</p>
  <p>Sigh. Why do the timings totally differ like that, and which timing method should I believe?</p>
  <p>Full benchmark code:</p>
  <pre><code>from timeit import timeit, default_timer
  
  n = 10**7
  a = list(range(n))
  b = list(range(n))
  pairs = list(zip(a, b))
  
  def f1(a, b, pairs):
      a[:], b[:] = zip(*pairs)
  
  def f2(a, b, pairs):
      for i, (a[i], b[i]) in enumerate(pairs):
          pass
  
  print('timeit')
  for _ in range(5):
      for f in f1, f2:
          t = timeit(lambda: f(a, b, pairs), number=1)
          print(f.__name__, '%.2f' % t, end='   ')
      print()
  
  print('default_timer')
  for _ in range(5):
      for f in f1, f2:
          t0 = default_timer()
          f(a, b, pairs)
          t = default_timer() - t0
          print(f.__name__, '%.2f' % t, end='   ')
      print()
  </code></pre>