Я немного смущен, меняя (изменяя или добавляя) переменные изнутри функций.
Для справки, я нашел этот вопрос около functions that mutate the argument. который описывает делать только, что на массиве:Python меняет переменные против массивов в функциях?
def add_thing(a):
a.append(2)
my_a = [1]
append_two(my_a)
my_a
>>> [1,2]
и мы получим те же результаты, используя + = [2]
Однако, если мы попробуем то же самое со строкой, или целым числом:
def add_world (s):
s += " world"
my_str = "hello"
add_world(my_str)
my_str
>>> "hello"
Он не меняется, и то же самое для целых чисел, например:
def add_one(i):
i += 1
x = 1
add_one(x)
x
>>> 1
Мой вопрос:
Как узнать, какие объекты я могу мутировать в функции, подобной массиву, и какие из них мне нужно назначить напрямую?
Почему оператор + = не работает, как я ожидал? Я был уверен, что это была короткая рука для my_var = my_var +, которая должна прекрасно работать внутри функции.
Возможный дубликат [Как передать переменную по ссылке?] (Http://stackoverflow.com/questions/986006/how-do-i-pass-a-variable-by-reference) –
Возможный дубликат [Значения списка изменений функций, а не значения переменных в Python] (http://stackoverflow.com/questions/17686596/function-changes-list-values-and-not-variable-values-in-python) –
Прочтите это внимательно, предпочтительно дважды. Это прояснит некоторые вещи для вас. http://robertheaton.com/2014/02/09/pythons-pass-by-object-reference-as-explained-by-philip-k-dick/ –