Oii Wallace, tudo bem?
Quando você executa o loop for para iterar sobre a lista restaurantes, cada restaurante que você acessa dentro do loop é, na verdade, uma referência direta ao objeto correspondente dentro da lista restaurantes. Isso significa que, quando você altera o valor da chave 'ativo' de restaurante, você está alterando diretamente o objeto na lista restaurantes. Não é uma cópia ou uma "instância" separada, mas sim o próprio objeto na lista.
Então, quando você consulta a lista de restaurantes após a alteração, você observa que o valor da chave 'ativo' foi modificado porque você alterou o objeto original na lista. Isso acontece porque listas e dicionários em Python são tipos mutáveis, o que significa que eles podem ser alterados após sua criação.
Resumindo, o dicionário restaurantes contém os objetos, e quando você itera sobre ele com um loop for, você obtém referências diretas a esses objetos, permitindo que você modifique seus estados diretamente.
Um abraço e bons estudos.