Это появилось в недавнем обсуждении 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 ()
Похоже, что правила распаковки не применяются для кортежей, как для списков. Я не могу придумать никаких объяснений этой непоследовательности. Есть ли причина такого поведения?