3

Pasar los Datos por Valor Vs Referencia en Python

Pasar los Datos por Valor Vs Referencia

Con Valores Simples

En Python por defecto los valores simples se pasan por valor (int, float, string…)

ejemplo pasando por valor:

defcomer_manzana(manzanas):
    manzanas - 1

manzanas = 5
comer_manzana(manzanas)
print(manzanas)

resultado:

5

Si queremos pasar por referencia debemos modificar la variable manzana con el resultado del metodo con return

defcomer_manzana(manzanas):return manzanas - 1

manzanas = 5
manzanas = comer_manzana(manzanas)
print(manzanas)

resultado

4

Por ultimo, otra alternativa es usar la palabra clave global que indica a Python que queremos usar la variable global en la función:

manzanas = 5defcomer_manzana():global manzanas
    manzanas = manzanas - 1

comer_manzana()
print(manzanas)

resultado

4

.

Con Valores Compuestos

En el caso de los valores compuestos por defecto se pasan por referencia

defsumar_fruta(lista_frutas):
    lista_frutas.append('fresa')

lista_frutas = ['manzana', 'uva', 'mango']
sumar_fruta(lista_frutas)
print(lista_frutas)

resultado

['manzana', 'uva', 'mango', 'fresa']

Si quieres pasar por valor un tipo compuesto , puedes enviar una copia del mismo.

defsumar_fruta(lista_frutas):
    lista_frutas.append('fresa')
    print(f'copia de lista frutas: {lista_frutas}')

lista_frutas = ['manzana', 'uva', 'mango']
sumar_fruta(lista_frutas[:]) # Una copia con [:]
print(f'lista de frutas original: {lista_frutas}')

resultado

copia de lista frutas: ['manzana', 'uva', 'mango', 'fresa']
lista de frutas original: ['manzana', 'uva', 'mango']

Espero que esto te sea de ayuda 😃

Escribe tu comentario
+ 2
1
1631Puntos

Perfecto, me estaba matando la cabeza porque hice una función cuyo parámetro era una lista y no me cuadraba que sin necesidad de retornar la lista esta cambiaba por fuera de la función, pero ya entendi que se pasa por referencia, muchas gracias.