四四四四四秒 发表于 2021-3-27 10:11:26

想问一下各位为什么会是这个结果?

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 = ";")

请问各位大佬,为何最后打印出来的是;

yuxijian2020 发表于 2021-3-27 10:25:38

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变为

kogawananari 发表于 2021-3-27 19:12:11

因为func不是纯函数

阿奇_o 发表于 2021-3-27 20:45:37

应该是因为 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都没有被释放,所以 是 +

均昊山 发表于 2021-3-27 21:45:04

python垃圾回收机制
页: [1]
查看完整版本: 想问一下各位为什么会是这个结果?