Что особенного в удалении пустого списка?

Рассмотрим следующее...

In [1]: del []

In [2]: del {}
  File "<ipython-input-2-24ce3265f213>", line 1
SyntaxError: can't delete literal

In [3]: del ""
  File "<ipython-input-3-95fcb133aa75>", line 1
SyntaxError: can't delete literal

In [4]: del ["A"]
  File "<ipython-input-5-d41e712d0c77>", line 1
SyntaxError: can't delete literal

Что особенного в []? Я ожидаю, что это поднимет и SyntaxError. Почему не так? Я наблюдал это поведение в Python2 и Python3.

Ответ 1

Синтаксис инструкции del позволяет target_list и включает в себя список или кортеж имен переменных.

Он предназначен для одновременного удаления нескольких имен:

del [a, b, c]

что эквивалентно:

del (a, b, c)

или

del a, b, c

Но python не применяет список для фактического наличия каких-либо элементов.

Выражение

del ()

с другой стороны, является синтаксической ошибкой; () рассматривается как буквальный пустой кортеж в этом случае.