Pitão

Passe por referência vs. Valor em Python

Passe por referência vs. Valor em Python
Depois de conhecer Python, você pode encontrar instâncias em que as funções não alteram os argumentos em um ponto como você anteciparia, especialmente se você estiver familiarizado com muitas outras linguagens de computador. Muitas linguagens usam argumentos de método como referências, definidos como passando por Referência para variáveis ​​atuais. Se você é um desenvolvedor avançado de Python que deseja compreender a maneira particular do Python de tratar argumentos de método, este guia é realmente para você.

Python suporta referência passagem por objeto

Passagem por referência e passagem por valor são inegavelmente as duas formas mais reconhecidas e facilmente compreensíveis de passagem de parâmetros entre linguagens de programação. Python é, infelizmente, 'passar por referência de objeto', nem "Passar por valor" nem "Passar por referência", muitas vezes denominado como "Chamada por referência de objeto", bem como "Chamada por compartilhamento.”É útil olhar mais de perto o próprio conceito, dividindo-o em segmentos enquanto você mergulha nas especificações técnicas da passagem por Referência:

Passar: isso significa fornecer a um método um argumento.

Por referência: isso significa que o argumento que você moveu para o método se refere a uma variável que agora reside no armazenamento em vez de uma réplica diferente dessa variável.

Conforme você atribui ao método uma referência a uma variável definida, a variável a que ele corresponde seria explicitamente influenciada por todas as operações nesta Referência. Agora vamos considerar um exemplo de como, na prática, isso funciona. Neste exemplo, definimos uma variável 'arg ' tendo um valor de 4. Ao longo deste cenário, a variável 'arg ' não foi modificado em seu lugar. Python parece lidar com o argumento fornecido em vez de uma referência a uma variável presente como um valor independente.

Isso significaria que em vez de por Referência, Python move argumentos por valor? Python move argumentos por meio de atribuição, portanto, nem por referência nem com valor. A lógica para isso é dupla:

Atualmente, o parâmetro passado é um ponteiro para um objeto. Certos tipos de dados são mutáveis ​​e alguns não são mutáveis.

Se movermos um objeto mutável para uma função, a função adquire uma referência para o mesmo objeto, de forma que você pode alterar tudo para a satisfação de sua alma; no entanto, o escopo externo não saberia de nada antes de você reingressar na Referência na função. Assim que terminar, a referência externa terá como objetivo apenas o objeto real. Se você mover um objeto imutável para uma função, a referência externa nem sempre pode ser religada e você não pode simplesmente transformar o objeto. Para tornar as coisas muito mais simples, vamos entender um por um.

Passe por referência

Em primeiro lugar, você deve entender que a variável 'mylist' em si não é uma lista, mas se refere a uma lista com valores. Você pode chamar a variável 'mylist' de um contêiner contendo valores. Os valores da lista são objetos. A variável 'mylist' foi diretamente entregue na função com seu conteúdo.

Tanto "lista" quanto "minha lista" parecem ser a mesma variável de armazenamento no exemplo de código abaixo e, portanto, se aplicam ao mesmo objeto de armazenamento. É por isso que na saída, ele imprime 'Saeed.'

Qualquer ação realizada na variável ou entidade seria imediatamente espelhada no método do chamador. O método pode modificar inteiramente o valor da variável e direcioná-lo a um objeto totalmente distinto. Como você pode ver na função 'set_list,' alteramos o conteúdo da lista e imprimimos uma lista totalmente nova com o elemento 'Aqsa.'Isso ocorre porque retornamos a lista modificada e a imprimimos na mesma linha do chamador.

O método também pode realocar os elementos da variável para o mesmo resultado abaixo. Você pode ver que acrescentamos um novo valor à lista, e a mudança foi refletida. Anexamos uma string única a uma lista e a devolvemos ao chamador. Para concluir, o método e o chamador têm usado a mesma variável e objeto em toda a relação de passagem.

Passe por valor

Por meio da passagem por valor, o método é fornecido com uma duplicata do objeto de argumento que o chamador atribui a ele. Isso garante que o item original permaneça inalterado e todas as modificações feitas sejam retidas em locais de memória separados em uma réplica do mesmo objeto.

É igualmente válido com quaisquer operações executadas em uma variável ou entidade pelo método. Duplicados de variáveis ​​e objetos no escopo do método do chamador são totalmente separados para resumi-los.

Passar objeto por referência

Em toda essa situação, uma vez que o Python é distinto, os métodos do Python obtêm a referência de objeto muito semelhante no armazenamento, conforme o chamador se refere. Por outro lado, a técnica não obtém a variável 'mylist' (o contêiner). O método do chamador armazena o mesmo objeto; o método gera um contêiner e gera um índice totalmente novo para o seu próprio, assim como na passagem por valor.

O chamador e o método falam do mesmo objeto no armazenamento, mas quando o método anexado aplica um item externo a uma lista, a entidade do chamador é modificada. Eles têm vários rótulos, mas são as mesmas coisas. Ambas as variáveis ​​contêm um objeto muito semelhante. Esse é o sentido por trás de sua relação com o movimento pelo objeto. No armazenamento, o método e o chamador usam um objeto semelhante, mas os capturam por meio de várias variáveis. A variável do chamador (o contêiner) não será alterada por nenhuma modificação feita na variável do método (o contêiner); apenas os dados ou o conteúdo são modificados.

Conclusão

Python opera independentemente de linguagens que aceitam a movimentação por referência ou valor de argumentos. Os argumentos do método são variáveis ​​locais que foram alocadas para cada valor transferido para o método. Mas isso ainda não o impede de obter os mesmos resultados que encontraria em outras linguagens ao mover argumentos por proxy.

Como usar o GameConqueror Cheat Engine no Linux
O artigo cobre um guia sobre como usar o mecanismo de cheat GameConqueror no Linux. Muitos usuários que jogam no Windows costumam usar o aplicativo “C...
Melhores emuladores de console de jogo para Linux
Este artigo irá listar software de emulação de console de jogo popular disponível para Linux. A emulação é uma camada de compatibilidade de software q...
Melhores distros Linux para jogos em 2021
O sistema operacional Linux percorreu um longo caminho desde sua aparência original, simples e baseada em servidor. Este sistema operacional melhorou ...