python 参数传递,如何让可变参数当作不可变参数传递
建站提交历史文章,原文写作时间 2022 年 1 月 30 日。
引子
众所周知,python中参数传递方式有很多,这些在其他文章中都有所详细陈述,在此不做赘述。(如果你需要了解python参数传递的基本知识,请绕路,相关文章在CSDN很丰富。)但是小编遇到一个问题便是可变参数的传递无法被当作不可变参数处理(python3.8),而我们常常需要这么做。这个问题的解决方案在全站没有找到解决方案,小编特写此文为有需要的人士介绍。
错误示例
1 | def demo(x): |
如图所示,虽然我们改变的是_x,但是奇怪的是x的值也发生了改变。看似我们对x变量进行了拷贝,但事实上python内部做的却只是引用了x变量的内存地址(因为设计者认为这样做更加快速且节约内存),这样也就可以理解为什么x和_x的值同时改变了。
解决方案
呼,终于到了解决方案了。
我们知道可变参数有且仅有:list,set,dict 三种,针对第一种我们有非常容易想到的解决方案。
1 | def demo(x): |
将不可变参数转换为可变参数传入,如果我们仅仅将列表参数当作元组使用,这个方案够用,并且更好。但是我们可见set和dict是无法不可变化的,于是python为我们留了解决方案。
list,set,dict 都是有copy()方法的,只需对代码进行微小修改。
1 | def demo(x): |
copy() 方法强制变量开辟新的内存空间,并进行拷贝。
评论