不太懂这个问题,求解答!

img

可以这样自己添加打印信息看看,这里把变量的物理地址打印出来会比较清晰
概括就是参数如果是可变类型如题中的数组,当该参数在调用时没有被赋值,运行时变量指向默认参数会直接影响后面调用的默认值

搭配代码注释和运行截图更好理解

下面是代码加注释,希望帮助你理解了这个问题,我也是用尽了洪荒之力

def func(x=[], y=[6,7]):
    print("x 的地址", id(x), end=";")
    print("y 的地址", id(y))
    x.append(8)
    y.append(8)
    return x+y
a, b = [1,2], [3,4]
print("a的地址", id(a), "b的地址", id(b))
# x传了,调用方法时,方法内的变量 x 指向 a 变量,默认参数x 不受影响,调用完之后默认参数 x=[]
# y没传,调用方法时,方法内的变量 y 指向默认参数y,  默认参数 y 执行了 append 操作,调用完之后 y=[6,7,8]
print("调用时只把 a 赋值给 x", end=">>")
t = func(x=a)
# x没传,调用方法时,方法内的变量 x 默认参数x,默认参数 x 执行了 append 操作,调用完之后默认参数 x=[8]
# y传了,调用方法时,方法内的变量 y 指向 b 变量,  默认参数 y 不受影响,调用完之后还是上一轮的值 y=[6,7,8]
print("调用时只把 b 赋值给 y", end=">>")
t = func(y=b)
# x没传,调用方法时,方法内的变量 x 默认参数x,默认参数 x 执行了 append 操作,调用完之后默认参数 x=[8,8]
# y没传,调用方法时,方法内的变量 y 指向默认参数y,  默认参数 y 执行了 append 操作,调用完之后 y=[6,7,8,8]
# 所以拼接起来就是最终结果x+y=[8, 8, 6, 7, 8, 8]
print("调用时不传参")
print(func(), end=';')
print()

img