Python引用传参为何特殊?参数未变更及变量指向疑问解析
Python函数传参中的引用问题解答
先看你提供的代码:
arr = [1] def f1(lst): lst.append(2) print(lst) lst = 2 print(lst) f1(arr) print(arr) # [1,2]
为何Python引用传参后参数未变更为指定值?
Python的函数传参是传对象引用,不是传统意义上能直接修改外部变量指向的“传引用”:
- 调用
f1(arr)时,函数内部的lst变量会拿到和arr相同的引用,也就是两者都指向内存里那个[1]的列表对象。这时候对lst调用append(2),是直接修改了这个列表对象本身,所以外部的arr也能看到这个变化(因为它们指向同一个对象)。 - 但执行
lst = 2时,并不是修改原来的列表对象,而是把函数内部的lst变量重新绑定到了新的整数对象2上。这个操作只会改变函数内部lst的指向,和外部的arr没有关系,外部的arr仍然指向原来的列表对象,所以最后打印arr还是[1,2]。
执行“lst = 2”时,lst变量指向什么?是否与arr不再关联?
执行lst = 2后,lst变量指向的是整数对象2,此时它和arr确实不再关联了。因为arr依旧指向最初的列表对象,而函数内部的lst已经切换了指向的目标,两者的引用完全分道扬镳。
内容的提问来源于stack exchange,提问作者YeongTak Cho
相关产品推荐
相关产品推荐

