Переменными объекта Python являются ссылки .
Оператор присваивания в python работает не с самими значениями, а с этими ссылками.
a = [1,2] # creates object [1,2]
b = [3,4] # creates object [3,4]
# a now holds a reference to [1,2]
# b now holds a reference to [3,4]
c = a
# c now holds a reference to [1,2] as well
c = [5,6] # creates object [5,6]
# c now holds a reference to [5,6] and forgets about the [1,2].
# This does NOT change the [1,2] object.
То же самое относится к вызову вашей функции:
def modify_dict(a_dict,a_key,a_value):
# a_dict is a REFERENCE to whatever the argument of the function is
a_dict = {a_key:a_value} # creates a new dict
# a_dict now holds a reference to that NEW dict and forgets what it
# was previously referencing.
# This does not influence the object that was given as an argument
Я думаю, чтоКлючевым понятием, которое следует понимать здесь, является то, что аргументы внутри функций - это ссылки на объекты, а не на сами объекты.
Чтобы фактически изменить a_dict, вам нужно получить к нему доступ напрямую, а не присваивать ему,как:
def modify_dict(a_dict,a_key,a_value):
a_dict[a_key] = a_value