title: Why does x,y = zip(*zip(a,b)) work in Python?
body: <p>OK I love Python's <code>zip()</code> function. Use it all the time, it's brilliant. Every now and again I want to do the opposite of <code>zip()</code>, think "I used to know how to do that", then google python unzip, then remember that one uses this magical <code>*</code> to unzip a zipped list of tuples. Like this:</p>
  
  <pre><code>x = [1,2,3]
  y = [4,5,6]
  zipped = zip(x,y)
  unzipped_x, unzipped_y = zip(*zipped)
  unzipped_x
      Out[30]: (1, 2, 3)
  unzipped_y
      Out[31]: (4, 5, 6)
  </code></pre>
  
  <p>What on earth is going on? What is that magical asterisk doing? Where else can it be applied and what other amazing awesome things in Python are so mysterious and hard to google?</p>