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.
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
# 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.
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.