Ничего общего с замыканиями, по крайней мере, не в обычном смысле.
Значение по умолчанию для b
не является "новым пустым списком";это «этот конкретный объект, который я только что создал прямо сейчас, определяя функцию, инициализируя ее как пустой список».Каждый раз, когда функция вызывается без аргумента, используется один и тот же объект.