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 😃
Excelente aporte.
Gracias! Ánimos
Me sirvio 😃
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.