Как таковые языки программирования не преподавал, только в составе более объемных предметов преподавал R и ds-stack для Python (pandas, numpy, scipy, sklearn, pytorch, keras, gensim, nltk).
По впечатлениям, могу сказать, что Python очень плох для объяснения Объектно ориентированного программирования (как минимум потому что в python нет никакой настоящей инкапсуляции, а полиморфизм в значительной степени уже заложен в динамическую типизацию). Он хорош для быстрой реализации кода в функциональном стиле, прототипирования и т.д. Иногда даже заставяляет рассуждать про ссылки, про копирование и глубокое копирование. Но там это просто нужно знать "как это работает", где нужно клонировать, а где и так сойдет. Python сделан не для программной инженерии, а для реализации конкретных прикладных задач, где баланс смещен в пользу "доказать что это в принципе возможно за приемлемое время", а не "сделать быстрый оптимизированный код".
Таким образом на Python хорошо учиться на уровне изучения алгоритмов и структур данных, пока, скажем, не наступит раздел, где привлекаются понятия из аллокации памяти.
Инструменты аллокации памяти вообще хорошо бы изучать на чистом С даже, а не на С++.
Скажем, для изучения ООП я не вижу разницы между изучение ООП на Java или на C++. Может быть, кто-то видит.