当尝试使用函数调用来修改调用函数中变量的值时,我观察到在传递列表并将其设置为函数参数时行为上的以下差异。
#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时从函数传递到调用函数的更改,即使它们都是可变数据类型?
您正在比较的操作不等效。
alist.append
更改列表alist
(并返回None
)。
aset.union
创建一个新集,但不修改原始集。
如果您这样做了aset.add(13)
,那将是等效的设置alist.append(13)
(向现有集合中添加新元素)。
如果您这样做alist = alist + [13]
,将相当于aset = aset.union({13})
(创建包含额外元素的新集合)的列表。