Python tuple vs generator
Parentheses are used for three different things: grouping, tuple literals, and function calls. Compare (1 + 2)
(an integer) and (1, 2)
(a tuple). In the generator
assignment, the parentheses are for grouping; in the tuple
assignment, the parentheses are a tuple literal. Parentheses represent a tuple literal when they contain a comma and are not used for a function call.
You can imagine tuples as being created when you hardcode the values, while generators are created where you provide a way to create the objects.
This works since there is no way (1,2,3,4)
could be a generator. There is nothing to generate there, you just specified all the elements, not a rule to obtain them.
In order for your generator
to be a tuple, the expression (i for i in sample_list)
would have to be a tuple comprehension. There is no way to have tuple comprehensions, since comprehensions require a mutable data type.
Thus, the syntax for what should have been a tuple comprehension has been reused for generators.