Modificando una lista en python pasándola a una función

Tengo el siguiente código de python:

def make_great(l): l = ['The great ' + magician for magician in l] magicians = ['Tom'] make_great(magicians) print(magicians) 

La statement de impresión imprime la lista original, no la modificada por la función make_great() . Estaba tratando de encontrar una forma de modificar cada elemento de una lista de python sin acceder explícitamente a su índice y luego reasignar ese índice a un nuevo valor. ¿La lista de magicians no apuntaría ahora a la nueva lista formada por la comprensión basada en el modelo de memoria de Python? ¿Supongo que no estoy obteniendo los resultados deseados porque este es un problema de scope? Pero cuando paso a los magicians , reemplaza a l en el argumento de la función, por lo que el intérprete de python realmente ve a los magicians = ['The ... ?

Cuando lo asigna a l , está redefiniendo l , no modificándolo. Use l[:] lugar:

 def make_great(l): l[:] = ['The great ' + magician for magician in l] 

También puede devolver la lista y redefinir magicians :

 def make_great(l): return ['The great ' + magician for magician in l] magicians = ['Tom'] magicians = make_great(magicians) print(magicians) 

En ese caso, podría asignar magicians a make_great(['Tom']) :

 magicians = make_great(['Tom']) print(magicians) 

Tu función no es devolver nada. Puede tener su statement de impresión en la función o devolver la lista modificada y luego imprimirla

 def make_great(l): return ['The great ' + magician for magician in l] magicians = ['Tom'] magicians = make_great(magicians) print(magicians) 

La función make_great duplica su matriz, por lo que debe devolver y asignar el resultado a los magos.

Puedes consultar ¿Cómo paso una variable por referencia? Para pasar referencias o valores en funciones.