Я был удивлен, увидев в Python 3 следующее: первые два ничего не дают:
>>> [] = ()
>>> () = ()
>>> {} = ()
  File "<stdin>", line 1
SyntaxError: can't assign to literal
 В Python 2.7 только первый ничего не вызывает:
>>> [] = ()
>>> () = ()
  File "<stdin>", line 1
SyntaxError: can't assign to ()
>>> {} = ()
  File "<stdin>", line 1
SyntaxError: can't assign to literal
  Что здесь происходит? Почему ни один из них не поднимает ошибок? И почему был () =() предположительно добавлен, чтобы быть действительным в Python 3?
 * Примечание. Вы можете заменить правую сторону любым пустым итерабельным (например, [] = set()), я просто выбираю пустой набор для иллюстрации