リスト内包をつかったクイックソート Python編

#!/usr/bin/env python
# -*- coding: utf-8 -*-

def qsort(list):
  if len(list) == 0:
    return []

  pivot = list.pop()
  return qsort([x for x in list if x < pivot]) + [pivot] + qsort([x for x in list if x >= pivot])

def main():
  test_list = [2, 5, 3, 4, 8, 9, 7, 10, 2,] 
  print qsort(test_list)

if __name__ == '__main__':
  main()

Pythonで書いてみて思ったんだけど、例えばPythonのリスト内包って、内部的にどうなってるんだろう。アルゴリズムを再現することはできてるけど、そもそも、分割時の、pivotよりも小さい(あるいは大きい)xを選び出す際に全走査だとしたら計算量大きくなっちゃわないのかな、とか。