В Python это не совсем так. Python передает ссылки на объекты. Внутри вашей функции у вас есть объект - вы можете изменить этот объект (если возможно). Однако целые числа неизменяемы . Один из способов обхода - передать целое число в контейнер, который можно изменить:
def change(x):
x[0] = 3
x = [1]
change(x)
print x
Это в лучшем случае уродливо / неуклюже, но вы не добьетесь большего успеха в Python. Причина в том, что в Python assignment ( =
) берет любой объект, являющийся результатом правой стороны, и привязывает его к тому, что находится слева * (или передает его соответствующей функции).
Понимая это, мы можем понять, почему нет способа изменить значение неизменяемого объекта внутри функции - вы не можете изменить ни один из его атрибутов, потому что он неизменяемый, и вы не можете просто присвоить «переменной» новый значение, потому что тогда вы фактически создаете новый объект (который отличается от старого) и даете ему имя, которое старый объект имел в локальном пространстве имен.
Обычно обходной путь - просто вернуть нужный объект:
def multiply_by_2(x):
return 2*x
x = 1
x = multiply_by_2(x)
* В первом примере выше 3
фактически передается в x.__setitem__
.