Software timing benchmarks are notoriously noisy because your computer isn't a very good controlled experimental platform. - Some algorithms are nondeterministic. For instance, some quicksort implementations choose a random pivot element. - While you're running your benchmarks, your python process may get preempted by other running applications, operating system threads, etc. - Even if your process got the same amount of CPU during every run, the timing may be different because a different mix of applications is running so your processor's memory caches have different hit/miss patterns. - [Some runs may get better branch prediction than others][1] (again, due to the mix of other processes running). This will cause more pipeline stalls. I would suspect that the effects I've given are given in order of decreasing strength (except that I believe Python's sort algorithm is deterministic, so the first effect is not a factor here). I also suspect that I've just scratched the surface. [1]: http://igoro.com/archive/fast-and-slow-if-statements-branch-prediction-in-modern-processors/