It is just a design decision. Making it a tuple
was debated in the PEP 3132, but rejected on usability grounds:
Make the starred target a tuple instead of a list. This would be
consistent with a function's *args, but make further processing of the
result harder.
Simlarly, making it of the same type as the iterable on the rhs of the assignment, was rejected:
Try to give the starred target the same type as the source iterable,
for example, b in a, *b = 'hello' would be assigned the string 'ello'.
This may seem nice, but is impossible to get right consistently with
all iterables.
The very example of yours is listed in the same PEP under specification.
Some reasoning is found in the mailing list of that debate.
When dealing with an iterator, you don't know the length in advance,
so the only way to get a tuple would be to produce a list first and
then create a tuple from it.