请问Python函数的形参,为什么有时可以改变、有时不可以?原谅我不知道该怎么形容,所以借用了“深浅拷贝”这样的概念…
def func(x,y,l):
x = y+1
l.append(0)
if "__main__" == __name__:
x=10; y=10; l=[3,2,1]
func (x,y,l)
print (x,y, l)
请问:运行函数func之后,为什么x和y的值没有变化、而l变了?
1 有没有办法让l也像x和y那样不变、运行函数之后直接释放?
2 有没有办法让x和y也像l那样改变?return吗?
谢谢了先!
首先需要理解两点,1赋值(=)是对地址的应用;2int为可变不对象,list为可变对象。这里简单说说可变和不可变,不可变对象的值改变了,引用的地址就改变了;可变对象的值改变,但是引用的地址不变,x和y的重新赋值会导致x,y指向其他地址,但是l一直指向同一个地址。想要看关于可变和不可变的详细介绍,链接https://zhuanlan.zhihu.com/p/...
问:“为什么x和y的值没有变化、而l变了?”
x=10,y=10,只是对“10”的同一个引用,x和y函数中的x重新赋值,指向地址id(x)已经改变,而l指向地址不变,
问:“有没有办法让l也像x和y那样不变、运行函数之后直接释放?”
不能,只能把这个元素从list中删除掉
问:”有没有办法让x和y也像l那样改变?return吗?“
需要给x,y重新赋值,下面代码只是对x