Я был удивлен, увидев в 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()
), я просто выбираю пустой набор для иллюстрации