The first Python implementation is bad - removing the first element in each iteration is O(n), the C implementation gets this right by maintaining one index into each list instead of modifying the lists.
def sort_test(): m2 = a + b; m2.sort()
instead of
def sort_test(): m2 = list(a + b); m2.sort()
EDIT: It seems like OP fixed this issue in perf.py, but left it in test.py
Edit: dropping the extra list() from the blog code examples.
I don't really buy that it reads nicer in prose since you can just do (a + b).sort() if you want. Plus, I feel like it's important for readability to not be unnecessarily redundant. Having list(a + b) code also risks creating misconceptions about how lists can be constructed and used in Python.