Назначение в Python не изменяет объект на месте. Он связывает имя так, что после input = new_val
локальная переменная input
получает новое значение.
Если вы хотите изменить «снаружи» input
, вам придется обернуть его внутри изменяемого объекта, такого как список из одного элемента:
def foo(input, new_val):
input[0] = new_val
foo([input])
Python не выполняет передачу по ссылке в точности так, как работает передача ссылок в C ++. В этом случае, по крайней мере, все, как будто каждый аргумент является указателем в C / C ++:
// effectively a no-op!
void foo(object *input, object *new_val)
{
input = new_val;
}