Here's a different, non recursive, solution for deep flattening:
def flatten(bad):
good = []
while bad:
e = bad.pop()
if isinstance(e, list):
bad.extend(e)
else:
good.append(e)
return good[::-1]
Very likely quite fast as well.