Passagem por referência x valor em Python

Pass Reference Vs



Depois de conhecer Python, você pode encontrar instâncias em que as funções não alteram os argumentos em um ponto como você poderia antecipar, principalmente se você estiver familiarizado com muitas outras linguagens de computador. Muitas linguagens usam argumentos de método como referências, definidos como passando por Reference 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

A passagem por referência e a 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, 'passagem por referência de objeto', nem passagem por valor nem passagem 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ê move para o método refere-se 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 à qual 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 ' nervoso' tendo um valor de 4 . Ao longo deste cenário, a variável ' nervoso' 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 autocontido.





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 transmitido é um ponteiro para um objeto. Certos tipos de dados são mutáveis ​​e outros não.

Se movermos um objeto mutável para uma função, a função adquire uma referência ao mesmo objeto, de forma que você pode transformar tudo para a satisfação de sua alma; entretanto, 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.

List & my list 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 autor da chamada.

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 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 à qual 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 seu 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 chamadora é 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 a 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 procuração.