想问一下各位为什么会是这个结果?
def func(x= [],y = ):x.append(8)
y.append(8)
return(x + y)
a,b = ,
t = func(x = a)
t = func(y = b)
print(func(),end = ";")
请问各位大佬,为何最后打印出来的是; def func(x= [],y = ):
x.append(8)
y.append(8)
return(x + y)
a,b = ,
t = func(x = a) # 这里 运行之后 默认参数 y =
t = func(y = b) # 这里 运行之后 默认参数 x =
print(func(),end = ";") # 这里 又对默认参数appendx变为 y变为
因为func不是纯函数 应该是因为 x 和 y 都是 列表类型(其实是“引用类型”),并且作为形参,
不是123这样的数值或字符类型(基本数据类型),这样,
在调用时,可能导致了x和y传递的实参 没有被释放。
如
这里 t = func(x=a) 后,y= 没有被释放;
而 t = func(y=b) 后,虽然 y被重新赋值(被释放了),但 x = 没有被释放。
注 :x=[]只是形参,没有实参传进来,就不会执行(没重新初始化);而后 x.append(8) 则再次引用/指向 没有被释放的 x为 的地址,故最后 x 变为 。
同理,最后,再调用 func(),也就可以理解了,同样是因为 x, y都没有被释放,所以 是 +
python垃圾回收机制
页:
[1]