Passe por referência vs. Valor em python

Passe por referência vs. Valor em python
Depois de conhecer o Python, você pode encontrar casos em que as funções não alteram os argumentos em um local como você previa, principalmente se você estiver familiarizado com muitas outras linguagens de computador. Muitos idiomas usam argumentos de método como referências, definidas como aprovação por referência às variáveis ​​atuais. Se você é um desenvolvedor avançado de Python que deseja entender a maneira particular de Python de tratar argumentos do método, este guia é realmente para você.

Python suporta Pass By Object Reference

Pass-por-referência e valor passam. Python é, infelizmente, 'referência passada por objeto', nem “passa por valor” nem “passa por referência”, frequentemente denominada “chamada por referência de objeto”, bem como “chamada compartilhando compartilhando.”É útil olhar mais de perto o próprio conceito, dividindo -o em segmentos enquanto você mergulha nas especificidades técnicas de aprovação por referência:

Passar: Isso significa fornecer um método com um argumento.

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

À medida que você atribui ao método uma referência a uma variável definida, a variável a que corresponde seria explicitamente influenciada por todas as operações nessa 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. O Python parece lidar com o argumento fornecido em vez de uma referência a uma variável atual como um valor independente.

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

Atualmente, o parâmetro que passa é 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 ao mesmo objeto, para que você possa mudar tudo para a satisfação de sua alma; No entanto, o escopo externo não saberia nada antes de você se juntar à referência na função. Quando terminar, a referência externa só buscará o objeto real. Se você mover um objeto imutável para uma função, a referência externa sempre poderá ser re-ligada e você não pode simplesmente mudar o objeto. Para tornar as coisas muito mais diretas, vamos entender um por um.

Passe por referência

Primeiro de tudo, 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' um contêiner com valores dentro dele. Os valores da lista são objetos. A variável 'mylist' foi entregue direta na função com seu conteúdo.

"Lista" e "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 para o método do chamador. O método pode modificar completamente o valor da variável e apontar para um objeto totalmente distinto. Como você pode ver na função 'set_list', mudamos o conteúdo da lista e imprimimos uma nova lista com o elemento 'aqsa.'Isso ocorre porque devolvemos a lista modificada e a imprimimos na mesma linha que o chamador.

O método também pode realocar os elementos da variável para o mesmo resultado abaixo. Você pode ver que anexamos 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 estão usando a mesma variável e objeto em toda a relação.

Passar por valor

Através do PASS 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. Duplicatas de variáveis ​​e objetos no escopo do método de chamadas estão totalmente separados para resumi -las.

Passe o objeto por referência

Ao longo desta situação, como o Python é distinto, os métodos de Python obtêm a referência de objeto muito semelhante no armazenamento à medida que o chamador se refere. Por outro lado, a técnica não obtém a variável 'MyList' (o contêiner). O método de chamadas armazena o mesmo objeto; O método gera o contêiner de alguém e gera um índice totalmente fresco para o seu, assim como em um valor por um 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 ​​têm um objeto muito semelhante. Esse é o sentido de trás de sua relação com a mudança pelo objeto. No armazenamento, o método e o chamador usam um objeto semelhante, mas os pegam através de várias variáveis. A variável de chamadas (o contêiner) não será alterada por nenhuma modificação feita na variável do método (o contêiner); Somente os dados ou o conteúdo são modificados.

Conclusão

O Python opera independentemente de idiomas que aceitam a mudança por referência ou valor dos argumentos. Argumentos de 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 você encontraria em outros idiomas enquanto move argumentos por procuração.