Pular para o conteúdo principal

Questão de Programação — Linguagens de programação — FGV 2024

ProgramaçãoLinguagens 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.Imagem associada para resolução da questãoEstá correto o que se afirma em
  1. AI, apenas.
  2. BII, apenas.
  3. CI e II, apenas.
  4. DII e III, apenas.
  5. 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.

Gabarito: letra D

Link permanente: /questoes/fg099879