Скажем, у меня есть некоторый класс с функцией-членом, которая используется не слишком часто, но определение которой довольно длинное
class foo:
# ...
fn():
print('This function is called rarely but its definition is quite lengthy')
# ...
В какой-то момент в майской программе я хочу создать миллионы экземпляров класса foo, и я хочу, чтобы это занимало как можно меньше места в памяти. Длинная функция fn также как-то скопирована миллион раз? В этом случае было бы лучше определить внешнюю функцию, которую я приведу в качестве входной информации. Если он не копируется миллионы раз, я бы предпочел оставить его как функцию-член.