Почему допустимо присваивать пустой список, а не пустой кортеж?

Это пришло внедавний разговор PyCon.

Заявление

[] = []

не делает ничего осмысленного, но и не создает исключения. У меня такое ощущение, что это должно быть из-за правил распаковки. Ты можешь сделатьраспаковка кортежей со списками, например,

[a, b] = [1, 2]

делает то, что вы ожидаете. Как логическое следствие, это также должно работать, когда количество распаковываемых элементов равно 0, что объясняет, почему присвоение пустому списку является допустимым. Эта теория дополнительно подтверждается тем, что происходит, когда вы пытаетесь назначить непустой список пустому списку:

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

Я был бы счастлив с этим объяснением, если бы то же самое было бы верно и для кортежей. Если мы можем распаковать в список с 0 элементами, мы также сможем распаковать в кортеж с 0 элементами, нет? Тем не мение:

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

Кажется, что правила распаковки не применяются для кортежей, как для списков. Я не могу придумать никакого объяснения этому несоответствию. Есть ли причина для такого поведения?

Ответы на вопрос(0)

Ваш ответ на вопрос