I have below two functions:
def foo(n=50000):
    return sum(i*i for i in range(n))  # just called sum() directly without 
def bar(n=50000):
    return sum([i*i for i in range(n)])  # passed constructed list to sum()
I was hoping that foo will run faster then bar but I have checked in ipython with %%timeit that foo is taking slightly longer then bar 
In [2]: %%timeit
   ...: foo(50000)
   ...: 
100 loops, best of 3: 4.22 ms per loop
In [3]: %%timeit
   ...: bar(50000)
   ...: 
100 loops, best of 3: 3.45 ms per loop
In [4]: %%timeit
   ...: foo(10000000)
   ...: 
1 loops, best of 3: 1.02 s per loop
In [5]: %%timeit
   ...: bar(10000000)
   ...: 
1 loops, best of 3: 869 ms per loop
The difference increases as I increase value of n hence I tried to check function with dis.dis(foo) and dis.dis(bar) but it was identical.
So what would be the cause of such time difference between both methods?
 
    