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:
- 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.
- 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)
TestarSaí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)
TestarSaí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
TestarUsando 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 de programação gratuitos com certificado
Aprenda a programar e desenvolva soluções para o seu trabalho com Python para alcançar novas oportunidades profissionais. Aqui na Asimov você encontra:
- Conteúdos gratuitos
- Projetos práticos
- Certificados
- +20 mil alunos e comunidade exclusiva
- Materiais didáticos e download de código
Comentários