Por que é válido atribuir a uma lista vazia, mas não a uma tupla vazia?

Isso surgiu emuma conversa recente sobre PyCon.

A declaração

[] = []

não faz nada significativo, mas também não gera uma exceção. Tenho a sensação de que isso se deve a regras de descompactação. Você pode fazerdesembalagem da tupla também com listas, por exemplo,

[a, b] = [1, 2]

faz o que você esperaria. Como conseqüência lógica, isso também deve funcionar quando o número de elementos a serem descompactados for 0, o que explicaria por que a atribuição a uma lista vazia é válida. Essa teoria é apoiada pelo que acontece quando você tenta atribuir uma lista não vazia a uma lista vazia:

>>> [] = [1]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: too many values to unpack

Eu ficaria feliz com esta explicação, se o mesmo também fosse verdadeiro para as tuplas. Se conseguirmos descompactar para uma lista com 0 elementos, também poderemos descompactar para uma tupla com 0 elementos, não? Contudo:

>>> () = ()
  File "<stdin>", line 1
SyntaxError: can't assign to ()

Parece que as regras de desempacotamento não são aplicadas para tuplas, assim como para listas. Não consigo pensar em nenhuma explicação para essa inconsistência. Existe uma razão para esse comportamento?

questionAnswers(4)

yourAnswerToTheQuestion