Por valor y referencia
Paso por valor
El paso de parámetros por
valor consiste en copiar el contenido de la variable que queremos pasar en otra
dentro del ámbito local de la subrutina, consiste pues en copiar el contenido
de la memoria del argumento que se quiere pasar a otra dirección de memoria,
correspondiente al argumento dentro del ámbito de dicha subrutina. Se tendrán
dos valores duplicados e independientes, con lo que la modificación de uno no
afecta al otro.
Ejemplo de paso por valor:
Como ya sabemos los números se
pasan por valor y crean una copia dentro de la función, por eso no les afecta
externamente lo que hagamos con ellos:
def doblar_valor(numero):
numero *= 2
n = 10
doblar_valor(n)
print(n)
10Paso por referencia.
El paso de parámetros por
referencia consiste en proporcionar a la subrutina a la que se le quiere pasar
el argumento la dirección de memoria del dato. En este caso se tiene un único
valor referenciado (o apuntado) desde dos puntos diferentes, el programa
principal y la subrutina a la que se le pasa el argumento, por lo que cualquier
acción sobre el parámetro se realiza sobre la misma posición de memoria.
El paso de la dirección de
memoria debe ser transparente al programador. Los lenguajes que permiten tratar
con direcciones de memoria, como C, permiten simular el paso de argumentos por
referencia, sin disponer realmente de esta característica.
Ejemplo de paso por referencia:
Sin embargo las listas u otras
colecciones, al ser tipos compuestos se pasan por referencia, y si las
modificamos dentro de la función estaremos modificándolas también fuera:
def doblar_valores(numeros):
for i,n in enumerate(numeros):
numeros[i] *= 2
ns = [10,50,100]
doblar_valores(ns)
print(ns)
[20, 100, 200]En resumen:
- 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 de la función le afectarán también fuera.
Comentarios
Publicar un comentario