(This question is based on a now deleted tweet)
I ran the following with both Python3.9 and Python3.10:
$ python -m timeit 'tuple([-x for x in range(1000)])'
10000 loops, best of 5: 35.7 usec per loop
$ python -m timeit 'tuple(-x for x in range(1000))'
5000 loops, best of 5: 45.7 usec per loop
Surprisingly, the version where an extra object is constructed (the list) is faster. Why is this the case? If this is indeed faster, why does the tuple constructor not just instantiate a list under the hood?
Note: I also timed these for length 10 and length 1 million tuples, and the version with the list is always faster.