Questão nº 59
Questão de Análise de Sistemas · CESGRANRIO BNDES 01/2024 (nº 59)
Considere o seguinte código em uma linguagem de programação hipotética, onde tipos escalares são passados por valor e tipos dinâmicos por referência:
```python
def modify_value(x):
x = x + 10
return x
def modify_list(lst):
lst.append(10)
return lst
a = 5
b = [5]
modify_value(a)
modify_list(b)
print(a) # Saída 1
print(b) # Saída 2
```
Considerando-se esse código e também a passagem de valores por referência e por valor, verifica-se que
- Aa é passado por valor, então a permanece 5, e b é passado por referência, então b se torna [5, 10]. (alternativa correta)
- Ba é passado por valor, então a permanece 5, e b é passado por valor, então b permanece [5].
- Ca é passado por valor, então a se torna 15, e b é passado por referência, então b se torna [5, 10].
- Da é passado por referência, então a se torna 15, e b é passado por referência, então b se torna [5, 10].
- Ea é passado por referência, então a se torna 15, e b é passado por valor, então b permanece [5].
Resposta comentada
Gabarito Alternativa A
Conceito-chave: Em linguagens com essa regra, tipos escalares (como int) são copiados ao serem passados para uma função — a função recebe uma “fotocópia” e alterações nela não afetam a variável original. Já tipos dinâmicos (como listas) são passados por referência — a função recebe o “endereço” do objeto original, então modificá-lo dentro da função altera o objeto fora dela.
- (A) Correta:
aé escalar, entãomodify_value(a)altera apenas a cópia local (a original continua5);bé lista, entãomodify_list(b)modifica o objeto original, adicionando10, resultando em[5, 10]. - (B) Incorreta: Erra ao dizer que
bé passado por valor — listas são passadas por referência, entãobmuda para[5, 10]. - (C) Incorreta: Erra ao afirmar que
ase torna15— como escalar é passado por valor, a variável originalapermanece5. - (D) Incorreta: Erra ao dizer que
aé passado por referência — escalares são passados por valor, entãoanão muda. - (E) Incorreta: Erra tanto ao dizer que
aé passado por referência (deveria ser por valor) quanto ao afirmar quebé passado por valor (deveria ser por referência).
Armadilha da banca: A pegadinha mais tentadora é a (C), pois o aluno vê que modify_value(a) retorna 15 e esquece que o retorno não é atribuído a a — a função altera apenas a cópia interna, e a variável original a continua 5. A banca explora exatamente essa confusão entre “o que acontece dentro da função” e “o que acontece com a variável fora dela”.
Fonte: CESGRANRIO BNDES 01/2024 Analista - Análise de Sistemas (Desenvolvimento) (Caderno Prova 3). Reproduzida para fins de estudo.