Я перешел с использования Matlab на Python, и назначение переменных при использовании функций сбивает меня с толку.
У меня есть следующий код:
a = [1,1,1]
def keeps(x):
y = x[:]
y[1] = 2
return y
def changes(x):
y = x
y[1] = 2
return y
aout = keeps(a)
print(a, aout)
aout = changes(a)
print(a, aout)
Первый оператор печати дает [1, 1, 1] [1, 2, 1]
, в то время как
второй дает [1, 2, 1] [1, 2, 1]
.
Я понял (исходя из Matlab), что операции с переменной внутри функции являются локальными.Но здесь, если я не сделаю копию переменной внутри функции, значения также изменятся и вне функции.Это почти как если бы переменная была определена как global
.
Будет ли очень полезно, если кто-то сможет объяснить, как переменные распределяются по-разному в обоих методах, и каковы лучшие практики, если кто-то хочет отправить переменную в функцию, не затрагивая ее значение вне функции?Спасибо.