Przypisanie w Pythonie nie modyfikuje obiektu w miejscu. Ponownie łączy nazwę, aby po input = new_val
zmienna lokalna input
otrzymała nową wartość.
Jeśli chcesz zmodyfikować „na zewnątrz” input
, trzeba zawinąć go wewnątrz zmienny obiektu, takiego jak liście jeden element:
def foo(input, new_val):
input[0] = new_val
foo([input])
Python nie przechodzą przez referencję dokładnie sposób działania przekazywania referencji w C++. W tym przypadku, co najmniej, to bardziej jakby każdy argument jest wskaźnikiem C/C++:
// effectively a no-op!
void foo(object *input, object *new_val)
{
input = new_val;
}
Możesz się pomylić przez wywołanie zmiennej lokalnej "input" w definicji funkcji foo. Ponadto, co Sven powiedział w odpowiedziach. – phkahler
Gdziekolwiek przeczytałeś, że Python przekazuje wszystko przez odniesienie, były one błędne. –