VisuAlg Web

Parâmetros em Python: mutação de listas e reatribuição

Distinguir reatribuição de mutação de uma lista em Python. Execute o exemplo, confira o resultado e pratique os casos de limite no VisuAlg Web.

Como Python não usa var por referência, uma forma didática de simular esse efeito é alterar um objeto mutável passado para a função.

Exemplo de códigoPython
def try_raise(s):
    s = s + 500  # Rebinds the local name s; the caller keeps its original object
    print("Salary inside function:", s)

salary = 1000.0

try_raise(salary)
print("Original salary outside function:", salary)  # Still 1000
Exemplo de códigoPython
# In Python, to mutate by reference-like behavior, use a mutable object like a list

def raise_in_place(s):
    s[0] = s[0] + 500

salary = [1000.0]
raise_in_place(salary)
print("Original salary is now:", salary[0])  # Changed to 1500!

Distinguir reatribuição de mutação de uma lista

A função recebe referências aos objetos usados na chamada. Atribuir outro valor ao nome local não muda o nome da variável de quem chamou. Já alterar um elemento de uma lista modifica o objeto compartilhado. Essa diferença não exige um parâmetro var e não corresponde a copiar automaticamente todo o objeto. Compare as duas operações do exemplo: numero recebe uma nova associação local; valores mantém a lista recebida e modifica sua posição zero.

Preserve a indentação dos blocos ao modificar este exemplo em Python.

Exemplo de códigoPython
def alterar(numero, valores):
    numero = numero + 5
    valores[0] = valores[0] + 5

inicial = 10
lista = [10]
alterar(inicial, lista)
print("Inteiro:", inicial)
print("Lista:", lista[0])

Resultado esperado e testes

Execute o exemplo sem fornecer entradas. A saída deve ser:

Inteiro: 10
Lista: 15

Fora da função, inicial continua dez e o conteúdo da lista passa a quinze. Como exercício, substitua a mudança do elemento por uma reatribuição de valores para uma nova lista. Preveja por que a lista externa deixa de mudar. Quando quiser evitar a alteração de uma lista recebida, construa uma cópia adequada ao tipo de dado antes de modificar seus elementos.

Depois, compare o raciocínio com a versão do mesmo assunto nas outras linguagens do menu.