python3默认值参数问题?

def pred(a,b=[]):
b.insert(0,a)
return b
print(pred(10))
print(pred(20))
print(pred(30))

def predd(a):
b=[]
b.insert(0,a)
return b
print(predd(10))
print(predd(20))
print(predd(30))

结果:
[10]
[20, 10]
[30, 20, 10]
[10]
[20]
[30]

为什么调用pred后b不是像predd中变量一样重新定义而是继续指向之前的列表

"def pred(a,b =[])"中的"b=[]"是指"b"的默认值为"[]",不是初始化。

这里你要注意一点,就是你在定义函数 pred(a,b=[]),有两个参数, pred(10) 第一次调用函数,将 a=10 传入,此时 b 为默认值 [] , 函数将 10 插入到 空列表索引为 0 的位置,这时 b=[10] , 然后返回 b 的值, b就处在了全局变量中,pred(20) 第二次调用函数,将 a=20 传入,此时 b 为 [10] ,就不需要取默认值了, 函数将 20 插入到 空列表索引为 0 的位置,这时 b=[20,10] ,其余类似。下面程序可帮助你理解:
图片说明