应用return等小问题


def func(x=[],y=[6,7]):
    x.append(8)
    y.append(8)
    return(x+y)
a,b=[1,2],[3,4]
t = func(x=a)
t = func(y=b)
print(func())

#输出结果为[8,8,6,7,8,8]

答案输出结果是
解析是:

img

我想问为什么解析第二步的y得出来结果不应该是【3,4,8】吗 为什么是【6,7,8】

虽然是小问题,但解释起来还是有点绕的,关键一点是要理解,变量x和y都只是代表了列表的内存地址,而不是列表本身。
如果不指定x和y的值(不指定其他的列表所在的内存地址),则x指向一个空列表的地址,比如说xxxx,y指向列表[6,7]的地址,比如说yyyy,换句话说,地址xxxx保存了一个空列表,yyyy保存了列表[6,7]。
xxxx -> []
yyyy -> [6,7,]
第一步,指定了变量x的值指向[1,2]所在的地址,比如说aaaa,而y还是默认指向yyyy,所以经过函数,这三个地址的列表变化如下:
aaaa -> [1,2,8]
xxxx -> []
yyyy -> [6,7,8]
第二步,指定了变量y的值指向[3,4]所在的地址,比如说bbbb,而x又指回了默认的xxxx,所以再次经过函数,有四个地址的列表变化如下:
aaaa -> [1,2,8]
bbbb -> [3,4,8]
xxxx -> [8]
yyyy -> [6,7,8]
第三步,不指定x和y,于是它们又指向了默认的地址xxxx和yyyy,于是函数运算后,结果如下:
aaaa -> [1,2,8]
bbbb -> [3,4,8]
xxxx -> [8,8]
yyyy -> [6,7,8,8]

参数是列表的,真的有的难顶,一不小心就出问题