Статья интересная, но недостаточно ясно написано почему питон медленный.
a=2
a=22222222222222222222222222
a=3.4
В питоне допустимо. Удобно. Но как следствие перед использованием a надо понять что там лежит. Длинное целое короткое целое или плавающее.
Это не одна машинная инструкция а два раза вызов кода для распознавания типов, поиск у этих типов специализированной версии сложения. Чем ни компилируйте это будет долго выполняться
def A(**kvarg):
...
A(k=2,z=5)
Вызов функции это не просто сдвижка указателя стека. Это создание словаря, работа со строками которые представляют ключи этого словаря и т.д. Это удобно но это дольше чем вызов функции в C.
class A:
pass
...
a=A()
a.a=2
В С этот код приводит к вычислению адреса и занесению туда данных. В питоне обращение к полю это обращение к элементу словаря. И это не поправишь. Поскольку в питоне поля могут появляться и исчезать в процессе работы программы.
Медленность питона не поправить компиляцией, это особенность языка.