The names an assignment target binds.
A plain x binds one. A destructuring target -- a, b = ..., or the
nested a, (b, c) = ... -- binds the leaves of the tuple, and Python lets
a list stand where a tuple does. Anything else binds nothing: the sieve has
already refused item and attribute assignment, so nothing else reaches
here, and answering with the empty set rather than aborting keeps this
usable by the sieve itself.
One definition, because the checker's definite-assignment table, the
evaluator's environment and assigns_stmt have to agree about what a, b= f() assigned or the three disagree about whether b exists.