Python utiliza un sistema, que se conoce como «Llamada por referencia de objeto» o «Llamada por asignación». En el caso de que pase argumentos como números enteros, strings o tuplas a una función, el paso es como una llamada por valor porque no puede cambiar el valor de los objetos inmutables que se pasan a la función. Mientras que pasar objetos mutables se puede considerar como una llamada por referencia porque cuando sus valores se cambian dentro de la función, también se reflejarán fuera de la función.
Ejemplo 1:
Python3
# Python code to demonstrate # call by value string = "Geeks" def test(string): string = "GeeksforGeeks" print("Inside Function:", string) # Driver's code test(string) print("Outside Function:", string)
Producción
Inside Function: GeeksforGeeks Outside Function: Geeks
Ejemplo 2
Python3
# Python code to demonstrate # call by reference def add_more(list): list.append(50) print("Inside Function", list) # Driver's code mylist = [10,20,30,40] add_more(mylist) print("Outside Function:", mylist)
Producción
Inside Function [10, 20, 30, 40, 50] Outside Function: [10, 20, 30, 40, 50]
Vinculación de nombres a objetos
En python, cada variable a la que asignamos un valor/contenedor se trata como un objeto. Cuando estamos asignando un valor a una variable, en realidad estamos vinculando un nombre a un objeto .
Python3
a = "first" b = "first" # Returns the actual location # where the variable is stored print(id(a)) # Returns the actual location # where the variable is stored print(id(b)) # Returns true if both the variables # are stored in same location print(a is b)
Producción
110001234557894 110001234557894 True
Ahora, tratemos de entender esto mejor con otro ejemplo.
Ejemplo 2:
Python3
a = [10, 20, 30] b = [10, 20, 30] # return the location # where the variable # is stored print(id(a)) # return the location # where the variable # is stored print(id(b)) # returns false if the # location is not same print(a is b)
Producción
541190289536222 541190288737777 False
El resultado de los dos ejemplos anteriores es diferente porque la lista es mutable y la string es inmutable . Una variable inmutable no se puede cambiar una vez creada. Si deseamos cambiar una variable inmutable , como una string, debemos crear una nueva instancia y vincular la variable a la nueva instancia. Mientras que la variable mutable se puede cambiar en su lugar.
Ejemplo 3:
Python3
def foo(a): # A new variable is assigned # for the new string a = "new value" print("Inside Function:", a) # Driver's code string = "old value" foo(string) print("Outside Function:", string)
Producción:
Inside Function: new value Outside Function: old value
En el ejemplo anterior, una string que es un tipo de objeto inmutable se pasa como argumento a la función foo. Dentro del alcance de la función foo dada, a= “nuevo valor” se ha acotado al mismo objeto que la string se ha atado fuera. Dentro del alcance de la función foo, modificamos «valor antiguo» por «valor nuevo». Una vez que dejamos el alcance de la función foo, a=”nuevo valor” ya no está en el espacio de nombres, y el valor al que se refiere la string nunca se cambió.
Ejemplo 4: ahora, veamos cómo se pasa la variable mutable a la función.
Python3
def foo(a): a[0] = "Nothing" # Driver' code bar = ['Hi', 'how', 'are', 'you', 'doing'] foo(bar) print(bar)
Producción:
['Nothing, 'how', 'are', 'you', 'doing']
Cuando pasamos una variable mutable a la función foo y la modificamos con algún otro nombre, la función foo todavía apunta a ese objeto y continúa apuntando a ese objeto durante su ejecución.
Publicación traducida automáticamente
Artículo escrito por priyanshid1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA