«Наименьшее удивление» и изменчивый аргумент по умолчанию

Любой, кто возился с Python достаточно долго, был укушен (или разорван на части) следующей проблемой: def foo(a=[]): a.append(5) return a Python послушники бы ожидать эта функция всегда возвращает список только с одним элементом: [5]. Результат вместо этого очень отличается, и очень удивительно...