Boa noite Carolina, tudo bem?
Em relação a alteração dos dados, itens passados como "valor" fazem uma copia da informação e não alteram a origem, itens passados como "referencia", como o caso da lista do exercicio, quando alterados os valores a origem é alterada tambem pois nao foi feita uma copia dos dados e sim passado um link.
Entendendo o funcionamento acima, respondendo as suas duvidas:
"Eu entendi que para solucionar o problema de Stefani é preciso criar outra lista e usar cada uma em uma função diferente."
A resolução pode ter inumeras variações mas todas vao depender da logica de negocio que o seu programa vai ter, se voce determinar que os dados da lista podem ser alterados nao tem problema passar uma referencia direta da lista e os dados serem alterados.
Se voce determinar que a lista nao deve ser alterada voce pode passar uma copia.
Fica a decisão do programador como o programa deve funcionar, nao vai existir certo e errado.
Mas sim, uma boa opção seria deixar uma lista "original" e criar uma copia para trabalhar em cima dela e descartar ao final, mantendo somente/sempre a lista original.
"Porque não se pode alterar duas vezes os valores dentro de uma lista?"
Como citei acima poder pode, sem problema. So não é recomendado dependendo do caso.
No exercicio ele queria fazer uma simulação de quantos anos teria uma pessoa daqui 5 anos, não queria realmente alterar a idade da pessoa.
Passando a lista original a idade seria alterada, o que nao era o proposito no caso.
Abraço!