Pass callbacks when building learner or when calling fit?

What is the difference between passing user-defined callbacks when building a learner and when calling fit or fit-like function(like fit_one_cycle)?

I delved deeply into the library code. I found these two key lines:

callbacks = [cb(self) for cb in self.callback_fns + listify(defaults.extra_callback_fns)] + listify(callbacks)
fit(epochs, self, metrics=self.metrics, callbacks=self.callbacks+callbacks)

Looks like you combine all kinds of callbacks together before entering the real training loop,whether it’s
Learner.callback_fns, Learner.callbacks, or callbacks that are passed to fit function and even defaults.extra_callback_fns.
So I guess there really isn’t much difference between these two ways of passing callbacks, is there?

The difference is the callbacks you pass for a particular fit are not stored. So on the next fit they aren’t there anymore.

Thanks. Very clear.