Такой интересный заголовок и такое позорное содержание!
По поводу самообучения: погружайся в нейронные сети.
По поводу самоизменения: надо менять код в рантайм? Могут помочь exec и eval, код хранить и модифицировать в переменных, списках и так далее, только зачем? Очень мало задач, где это действительно нужно.