Questão de Programação — Linguagens de programação — FGV 2024
Programação›Linguagens de programação
Código
fg099879
Banca
FGV
Órgão
TJ-RR
Ano
2024
Nível
Superior
Cargo
Analista Judiciário - Ciência de Dados e Analytics
Considerando a linguagem de programação Python, analise os itens I, II e III a seguir. Os códigos foram escritos na versão 3.10.12.Está correto o que se afirma em
AI, apenas.
BII, apenas.
CI e II, apenas.
DII e III, apenas.
EI, II e III.
Revelar gabarito e comentário▾
GabaritoD — II e III, apenas.
Comentário gerado por IA. É um apoio ao estudo, ancorado em fontes, mas pode conter imprecisões — confira sempre na fonte oficial (lei, súmula, edital e gabarito da banca). Encontrou um erro? Use “Reportar”.
Python: Escopo de Variáveis e Mutabilidade
Gabarito: letra D — corretos os itens II e III. A questão testa dois pilares da linguagem Python: o escopo de variáveis (local × global) e a mutabilidade dos objetos (listas são mutáveis; inteiros são imutáveis). O item I está incorreto porque tenta modificar uma variável global dentro de uma função sem declará-la como global, o que em Python cria uma nova variável local, não altera a global. Os itens II e III estão corretos porque exploram corretamente a mutabilidade das listas e a imutabilidade dos inteiros, respectivamente.
Para entender a questão, é preciso dominar dois conceitos fundamentais do Python: escopo e mutabilidade. O escopo define onde uma variável é visível e pode ser acessada. Em Python, uma variável atribuída dentro de uma função é, por padrão, local àquela função, mesmo que exista uma variável global com o mesmo nome. Para modificar uma variável global dentro de uma função, é necessário usar a palavra-chave global. Sem ela, a atribuição x = 10 dentro da função cria uma nova variável local x, que é destruída quando a função termina, deixando a variável global intacta.
A mutabilidade refere-se à capacidade de um objeto ser alterado após sua criação. Objetos mutáveis (como listas, dicionários e conjuntos) podem ter seu conteúdo modificado sem que a referência mude. Objetos imutáveis (como inteiros, strings e tuplas) não podem ser alterados; qualquer operação que pareça modificar um inteiro, na verdade, cria um novo objeto. Essa distinção é crucial para entender o comportamento de funções que recebem esses objetos como argumentos.
Vamos a um exemplo prático para fixar. Considere uma função que recebe uma lista e um inteiro:
def modifica(lista, numero):
lista.append(4) # modifica a lista original
numero = 10 # cria uma nova variável local, não altera o inteiro original
minha_lista = [1, 2, 3]
meu_numero = 5
modifica(minha_lista, meu_numero)
print(minha_lista) # [1, 2, 3, 4] — a lista foi modificada
print(meu_numero) # 5 — o inteiro não foi alterado
Aqui, a lista é passada por referência, então a função pode alterá-la. O inteiro é passado por valor (na prática, por referência a um objeto imutável), então a atribuição numero = 10 apenas faz a variável local apontar para um novo objeto, sem afetar o original.
A pegadinha que a banca explora é justamente essa: o candidato que não domina a diferença entre mutável e imutável tende a achar que o item I está correto, pois pensa que a atribuição dentro da função altera a variável global. Mas em Python, sem a declaração global, isso não acontece. Guarde a fronteira: atribuição (=) dentro de função cria variável local; mutação (como append, remove, sort) altera o objeto original.
Atribuição (=)
Mutação (append, sort)
Objeto mutável (lista, dict)
Cria variável local — original intacto
Altera o objeto original
Objeto imutável (int, str)
Cria variável local — original intacto
Altera o objeto original
LEVEL · soulevel.com.br
Item I — ❌ Incorreto
O item I afirma que o código modifica corretamente uma variável global dentro de uma função. O erro está na ausência da declaração global. Em Python, quando você atribui um valor a uma variável dentro de uma função, ela se torna local por padrão, mesmo que exista uma variável global com o mesmo nome. Para modificar a global, seria necessário declarar global x dentro da função. Sem isso, a atribuição cria uma nova variável local, e a global permanece inalterada. Portanto, o item I está incorreto.
Item II — ✅ Correto
O item II explora a mutabilidade das listas. Quando uma lista é passada para uma função e um método como append é chamado, a lista original é modificada, pois listas são objetos mutáveis. Isso está correto e é um comportamento esperado em Python. O item II está correto.
Item III — ✅ Correto
O item III explora a imutabilidade dos inteiros. Quando um inteiro é passado para uma função e uma atribuição é feita, a variável local passa a apontar para um novo objeto, mas o inteiro original não é alterado. Isso está correto, pois inteiros são imutáveis. O item III está correto.
Conclusão: Corretos: II e III → portanto a alternativa é a letra D.
PEGA ESSA DICA!
Para não errar em questões de escopo e mutabilidade, lembre-se: atribuição (=) dentro de função cria variável local; mutação (como append, remove, sort) altera o objeto original. Se a intenção é modificar uma variável global, use global. Se a intenção é modificar um objeto mutável, chame um método que o altere. Essa distinção é a chave para resolver questões como esta.