Como passar uma variável por referência em Python?

Avatar de Juliano Faccioni Juliano Faccioni
3 minutos de leitura 4 meses atrás

Entender como as variáveis são passadas em Python pode ser um pouco complicado, especialmente se você vem de um background em outras linguagens de programação. O conceito de passar uma variável por referência em Python ou por valor é um pouco diferente. Vamos explorar como o Python lida com a passagem de variáveis e como você pode alcançar o efeito de passar por referência.

Mecanismo de Passagem por Atribuição do Python

Em Python, os argumentos são passados por atribuição, o que significa que a função recebe uma referência ao objeto, mas a referência em si é passada por valor. Isso tem duas implicações:

  1. Se você passar um objeto mutável (como uma lista ou um dicionário) para uma função, a função pode alterar o objeto.
  2. Se você passar um objeto imutável (como um inteiro, tupla ou string), você não pode mudar o objeto original ou reatribuir a referência no escopo de chamada.

Exemplo de Objetos Mutáveis: Listas

Vamos olhar um exemplo usando uma lista, que é um tipo mutável:

def tentar_mudar_conteudo_da_lista(a_lista):
    print('recebido', a_lista)
    a_lista.append('quatro')
    print('alterado para', a_lista)

lista_externa = ['um', 'dois', 'três']
print('antes, lista_externa =', lista_externa)
tentar_mudar_conteudo_da_lista(lista_externa)
print('depois, lista_externa =', lista_externa)
Testar

Saída:

antes, lista_externa = ['um', 'dois', 'três']
recebido ['um', 'dois', 'três']
alterado para ['um', 'dois', 'três', 'quatro']
depois, lista_externa = ['um', 'dois', 'três', 'quatro']

Como você pode ver, a função foi capaz de modificar o conteúdo de lista_externa porque listas são mutáveis.

Exemplo de Objetos Imutáveis: Strings

Agora, vamos ver o que acontece com strings, que são imutáveis:

def tentar_mudar_referencia_da_string(a_string):
    print('recebido', a_string)
    a_string = 'Em um reino junto ao mar'
    print('definido como', a_string)

string_externa = 'Era muitos e muitos anos atrás'
print('antes, string_externa =', string_externa)
tentar_mudar_referencia_da_string(string_externa)
print('depois, string_externa =', string_externa)
Testar

Saída:

antes, string_externa = Era muitos e muitos anos atrás
recebido Era muitos e muitos anos atrás
definido como Em um reino junto ao mar
depois, string_externa = Era muitos e muitos anos atrás

A função não pôde alterar a string original porque strings são imutáveis.

Como Simular Passagem por Referência

Se você quiser simular o comportamento de passar uma variável por referência com objetos imutáveis em Python, você pode usar um objeto embrulho como uma lista:

def usar_um_embrulho_para_simular_passagem_por_referencia(coisa_a_mudar):
    coisa_a_mudar[0] = 'Alterado'

embrulho = ['Original']
usar_um_embrulho_para_simular_passagem_por_referencia(embrulho)
print(embrulho[0])  # Saída: Alterado
Testar

Usando uma lista para embrulhar a string, você pode alterar a lista para refletir as mudanças.

Resumo

Em Python, passamos variáveis para funções por atribuição, o que significa que a função recebe uma referência ao objeto, não o próprio objeto em si. Podemos alterar objetos mutáveis dentro da função, afetando o objeto original. Entretanto, não podemos alterar objetos imutáveis, mas você pode simular a passagem por referência usando um objeto embrulho mutável. Entender esses conceitos ajudará você a manipular variáveis em Python de forma mais eficaz.

Curso Gratuito

Curso gratuito de Python

Do zero ao primeiro projeto em apenas 2 horas

Criar conta gratuita

Comentários

Comentar
Você tem o Acesso Básico.
Libere seu acesso ao suporte dos professores Garanta seu acesso PRO para tirar todas suas dúvidas com nossa equipe.
Seja PRO