Está en la página 1de 2

Leccion 5 (Apuntes) - Argumentos por valor y referencia http://localhost:8888/nbconvert/html/Fase 2 - Manejo de datos y optimiz...

Paso por valor y paso por referencia


Paso por valor: Se crea una copia local de la variable dentro de la función.
Paso por referencia: Se maneja directamente la variable, los cambios realizados dentro le afectarán también fuera.

Tradicionalmente, los tipos simples se pasan automáticamente por valor y los compuestos por referencia.

Simples: Enteros, flotantes, cadenas, lógicos...


Compuestos: Listas, diccionarios, conjuntos...

Ejemplo paso por valor

In [1]: def doblar_valor(numero):


numero*=2

n = 10
doblar_valor(n)
n

Out[1]: 10

Ejemplo paso por referencia

In [2]: def doblar_valores(numeros):


for i,n in enumerate(numeros):
numeros[i] *= 2
ns = [10,50,100]
doblar_valores(ns)
ns

Out[2]: [20, 100, 200]

Trucos
Para modificar los tipos simples podemos devolverlos modificados y reasignarlos:

In [3]: def doblar_valor(numero):


return numero*2
n = 10
n = doblar_valor(n)
n

Out[3]: 20

Y en el caso de los tipos compuestos, podemos evitar la modificación enviando una copia:

1 de 2 12/01/2018 08:40 a. m.
Leccion 5 (Apuntes) - Argumentos por valor y referencia http://localhost:8888/nbconvert/html/Fase 2 - Manejo de datos y optimiz...

In [4]: def doblar_valores(numeros):


for i,n in enumerate(numeros):
numeros[i] *= 2
ns = [10,50,100]
doblar_valores(ns[:]) # Una copia al vuelo de una lista con [:]
ns

Out[4]: [10, 50, 100]

2 de 2 12/01/2018 08:40 a. m.

También podría gustarte