Пытаясь использовать вызов функции для изменения значения переменной в вызывающей функции, я наблюдал следующую разницу в поведении при передаче списка и в качестве параметров функции.
#Passing list as parameter
def fun(a):
a = a.append(13)
a = [12]
print(a)
fun(a)
print(a)
#Output
[12]
[12, 13]
#Passing set as a parameter
def fun(a):
a = a.union({13})
a = {12}
print(a)
fun(a)
print(a)
#Output
{12}
{12}
Мой вопрос: почему изменения из функции переносятся в вызывающую функцию при использовании списка, но не при использовании set, даже если они оба являются изменяемыми типами данных?