Tutoriais

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

Juliano Faccioni 27 fev Intermediário 5xp
Compartilhar

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.

Cursos gratuitos para continuar aprendendo

Curso
Grátis · 2h 13min

Python para iniciantes: do zero ao primeiro projeto

Aprenda sobre variáveis, loops e funções e crie seu primeiro projeto Python em apenas 2 horas!

Curso
Grátis · 3h 47min

Python para dados: do zero à análise completa

Saia do zero e analise dados com Python e Pandas neste curso gratuito com certificado!

Curso
Grátis · 4h 11min

Python para IA: do zero ao primeiro chatbot

Aprenda a programar com Python e explore a inteligência artificial! Crie um chatbot prático que interage com seus próprios dados. Comece agora!

Ver todos os cursos

0 comentários

Exclusivo PRO
Faça parte da discussão

Comente e participe da conversa

Crie sua conta gratuita e compartilhe sua opinião nos comentários.

Entre para a Asimov