Alternativa B - 1
Para entender por que o valor impresso é 1, precisamos analisar como o Python trata variáveis e funções no contexto apresentado.
Análise do Código
O código pode ser dividido em três partes principais: definição da função, atribuição inicial e execução das chamadas.
- Definição da Função:
def foo(a):
return a + a + a
A função foo recebe um parâmetro a, realiza uma operação matemática (a * 3) e retorna o resultado. Importante: a função não altera o valor da variável passada como argumento, ela apenas devolve um novo valor que precisa ser armazenado explicitamente.
- Inicialização da Variável:
b = 1
A variável b recebe o valor inteiro 1.
- Execução das Chamadas:
foo(b)
foo(b)
foo(b)
Aqui ocorrem três chamadas à função passando o valor de b (que é 1).
- Cada chamada calcula
1 + 1 + 1 = 3. - Porém, o resultado (3) não é atribuído a nada. Ele é calculado e descartado.
- Como não houve comando
b = foo(b), o valor original de b permanece inalterado.
- Impressão Final:
print(b)
Como b nunca mudou desde sua inicialização, o valor impresso continua sendo o inicial.
Resumo Lógico
| Ação | Efeito sobre b |
|---|
b = 1 | b passa a valer 1 |
foo(b) | Calcula 3, mas não guarda. b continua valendo 1 |
foo(b) | Calcula 3, mas não guarda. b continua valendo 1 |
foo(b) | Calcula 3, mas não guarda. b continua valendo 1 |
print(b) | Exibe 1 |
Muitos candidatos podem errar achando que as chamadas da função somam ao valor de b, mas isso só aconteceria se houvesse uma reatribuição explícita (ex: b += foo(b) ou b = foo(b)). Como os números em Python são objetos imutáveis e a função não tem acesso direto para modificar a variável externa sem retornar e reatribuir, o valor original persiste.
Portanto, a alternativa correta é a B.