title: Python bug? Lazy objects have hidden state
body: <p>Consider this (Python 3.3):</p>
  
  <pre><code>a=enumerate([2,3,5])
  print(list(a))
  print(list(a))
  </code></pre>
  
  <p>Do you really expect two print calls to print different things?
  Neither did I.</p>
  
  <p>The same thing happens if you replace list with <code>set</code>, <code>tuple</code> or <code>dict</code>. It also happens if you replace <code>enumerate</code> object with <code>map</code> or <code>filter</code>, but curiously, not if you replace it with <code>range</code>.</p>
  
  <p>Maybe it is a feature. But it's very surprising, not documented (at least I haven't been able to find anything about it), and not consistent (range works differently). What do you think?</p>