Yes, it would mean that, which is particularly nasty considering the fact that `_` in python and `Out` in IPython would then acquire the very reference that was being deleted.
I think that my proposed change would be unacceptable without addressing this problem.
To resolve this, `del` could be made both a statement and an expression.
The parsing rules would be very similar to how the walrus operator is handled today, but instead of being a SyntaxError in statement mode, it would simply produce a different ast node:
* `del x` -> `Delete(x)` (as `x := 0` -> SyntaxError)
* `(del x)` -> `Expr(DeleteExpr(x))`
(as `(x := 0)` -> `Expr(NamedExpr(...))`)