[] = (), () = (), and {} = () 'assignments' : <p>I was surprised to find the following, in Python 3, the first two raise nothing:</p>

<pre><code>&gt;&gt;&gt; [] = ()
&gt;&gt;&gt; () = ()
&gt;&gt;&gt; {} = ()
  File "&lt;stdin&gt;", line 1
SyntaxError: can't assign to literal
</code></pre>

<p>In Python 2.7, only the first one raises nothing:</p>

<pre><code>&gt;&gt;&gt; [] = ()
&gt;&gt;&gt; () = ()
  File "&lt;stdin&gt;", line 1
SyntaxError: can't assign to ()
&gt;&gt;&gt; {} = ()
  File "&lt;stdin&gt;", line 1
SyntaxError: can't assign to literal
</code></pre>

<p>What is going on here? Why are any of then not raising errors? And why was the <code>() = ()</code> presumably added to be valid in Python 3?</p>

<p>*Note, you can replace the right hand side with any empty iterable (e.g. <code>[] = set()</code>), I just choose an empty tuple for the illustration</p>
