温馨提示:本文翻译自stackoverflow.com,查看原文请点击:python - What causes the differing behavior in processing list parameters and dictionary parameters passed to

python - 是什么原因导致处理传递到的列表参数和字典参数不同的行为

发布于 2020-03-27 11:28:24

当尝试使用函数调用来修改调用函数中变量的值时,我观察到在传递列表并将其设置为函数参数时行为上的以下差异。

#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时从函数传递到调用函数的更改,即使它们都是可变数据类型?

查看更多

查看更多

提问者
Tabish Mir
被浏览
87
khelwood 2019-07-03 22:47

您正在比较的操作不等效。

alist.append更改列表alist(并返回None)。
aset.union创建一个新集,但不修改原始集。

如果您这样做了aset.add(13),那将是等效的设置alist.append(13)(向现有集合中添加新元素)。
如果您这样做alist = alist + [13],将相当于aset = aset.union({13})(创建包含额外元素的新集合)的列表。