Python两次调用函数改变了形参默认值

问题遇到的现象和发生背景

Python 两次调用同一个函数会改变形参的默认值

遇到的现象和发生背景,请写出第一个错误信息

下面是一段简单的函数,我们将它调用两次:

def func(A=[]):
    A.append(1)
    print(id(A))
    return A

print(func())  # [1]
print(func())  # [1,1]

Output:

1449889792264
[1]
1449889792264
[1, 1]

第一次输出[1],第二次输出[1,1],id()函数反映两个A是同一个对象。不知道这是为什么,我把这个函数略作修改,List()改Set(),输出结果却正好相反:

def func(A=set()):
    A.add(1)
    print(id(A))
    return A

print(func())  # {1}
print(func())  # {1,1}

Output:

2032723709064
{1}
2032723709064
{1}

依旧是同一个对象id,但是两次调用却没有改变默认形参的值
有没有精通Python的伙伴能解释一下。

你是不是不知道set的作用……,它就是用来去除重复值的呀,两次都加上1,重复了,只会剩下1个。
set确实是可变对象,你这样改一下就知道了:

def func(value, A=set()):
    A.add(value)
    return A

print(func(1))  # {1}
print(func(2))  # {1, 2}