A thought from another direction...

Any chance we could have the interpreter raise a warning for the case

def foo(a = []):


The empty list and empty dict args would, I imagine, be the two most common mistakes. Showing a warning might, at least, solve the problem of people tripping over the syntax.