So here is my timings:
>>> import timeit >>> timeit.timeit(lambda: set(l)) 0.7210583936611334 >>> timeit.timeit(lambda: {*l}) 0.5386332845236943 Why is that, my opinion would be equal but it's not.
So unpacking is fast from this example, right?
For the same reason [] is faster than list(); the interpreter includes dedicated support for syntax based operations that uses specialized code paths, while constructor calls involve:
dict lookups, one in global scope, then another in built-in scope when it fails)All of these advantages relate to fixed overhead; the big-O of both approaches are the same, so {*range(10000)} won't be noticeably/reliably faster than set(range(10000)), because the actual construction work vastly outweighs the overhead of loading and calling the constructor via generic dispatch.
[] is faster than list() too, wow good explanation, only can accept in 8 minutes.
setcould be redefined so it needs an additional dictionary lookup but this would probably not explain the whole difference.