¿Por qué es válido asignar a una lista vacía pero no a una tupla vacía?
Esto surgió enuna charla reciente de PyCon.
La declaración
[] = []
no hace nada significativo, pero tampoco arroja una excepción. Tengo la sensación de que esto se debe a las reglas de desempaque. Tu puedes hacerdesempaque de tuplas con listas también, por ejemplo,
[a, b] = [1, 2]
hace lo que esperarías. Como consecuencia lógica, esto también debería funcionar, cuando el número de elementos para descomprimir es 0, lo que explicaría por qué la asignación a una lista vacía es válida. Esta teoría está respaldada por lo que sucede cuando intenta asignar una lista no vacía a una lista vacía:
>>> [] = [1]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: too many values to unpack
Estaría contento con esta explicación, si lo mismo también sería cierto para las tuplas. Si podemos descomprimir en una lista con 0 elementos, también deberíamos poder descomprimir en una tupla con 0 elementos, ¿no? Sin embargo:
>>> () = ()
File "<stdin>", line 1
SyntaxError: can't assign to ()
Parece que las reglas de desempaque no se aplican para las tuplas como lo son para las listas. No puedo pensar en ninguna explicación para esta inconsistencia. ¿Hay alguna razón para este comportamiento?