title: What does self = None do?
body: <p>I'm reading <a href="http://code.google.com/p/tulip/source/browse/asyncio/events.py#37">the source code of the incoming <code>asyncio</code> package</a>.  Note that at the end of the method, there is a <code>self = None</code> statement.  What does it do?</p>
  
  <pre><code>def _run(self):
      try:
          self._callback(*self._args)
      except Exception as exc:
          msg = 'Exception in callback {}{!r}'.format(self._callback,
                                                      self._args)
          self._loop.call_exception_handler({
              'message': msg,
              'exception': exc,
              'handle': self,
          })
      self = None  # Needed to break cycles when an exception occurs.
  </code></pre>
  
  <p>I thought it would erase the instance, but the following test doesn't suggest so:</p>
  
  <pre><code>class K:
      def haha(self):
          self = None
  
  a = K()
  a.haha()
  print(a) # a is still an instance
  </code></pre>