OlezhkaПри любой рекурсии оно висит в памяти, пока вызовы не завершились. Почему для root.after() нельзя применять рекурсию - потому что эти вызовы бесконечны. То есть ты один раз жмёшь на кнопку и они после этого одного нажатия всё запускаются и запускаются через каждую секунду, не завершаясь никогда. То есть оно мало того что в памяти висит постоянно и ещё и растёт в памяти по мере появления новых вызовов, так оно ещё и дойдёт таким образом до лимита рекурсии в конце концов и выпадет. В разных языках разный лимит рекурсии; только не во всех языках он в количестве выражается, как в питоне. Но суть в том, что эти вызовы будут повторяться и повторяться и при этом всё висеть и висеть.
Или это засирание происходит только при использовании “root.after()”?
Рекурсию можно применять только тогда, когда она неглубокая (не бесконечная) и когда она строго определена и вызовы завершаются гарантировано. А в других языках рекурсию можно применять, даже если она бесконечная, но тогда ты должен проконтролировать, чтобы она была хвостовой рекурсией и чтобы в языке была оптимизация хвостовой рекурсии в простой цикл. В Erlang'е вот такая рекурсия, поэтому там бесконечные рекурсии можно делать, они не обрушат программу.