Agreed on all counts. However I do find myself using mutables as default arguments sometimes because the generated documentation is clearer.
For example, this is a real method in one of my projects:
def listen(self, address, ssl=False, ssl_args={}):
pass
I like the way this turns up in the docs because it's immediately clear that ssl_args needs to be a dict. Otherwise I have to describe it in words.