이게 이해가 잘 안되는 부분이긴 해요 ^^
일단, 끝까지 이해하려고 노력하는 부분은 매우 좋은 점입니다.
리스트는 스트링과는 달리, referencing 구조이기 때문에,
recursion 을 통해서 수정하는 내용이 실시간으로 반영이 됩니다.
그래서 recursion 이 끝까지 도달(base case까지) 하는 시점에서 리스트 내용이 이미 없어진 상태이지요.
다시 올라오면서 복귀가 되지 않기 때문에, 아무것도 없는 원본이 출력됩니다.
스트링은 반면에 recursion function call 을 할 때 원본과는 무관한 copy 가 전달됩니다.
그래서 나중에 올라오면서 프린트해도, 중간 단계가 다 유지가 됩니다.
다만 리스트는 recursion 단계의 모든 call 에서 실제로 단 하나의 object 만 보고 있다는 게 중요해요.
오히려 리커젼 보다는 object 를 argument 로 pass 할 때
pass by value 인지, pass by reference 인지를 이해하는게 더 중요합니다. ^^