遇到一个问题,是这样的:
b = [1, 2, 3] def aaa(b): b.append(4) def bbb(b): b = 5 aaa(b) print(b) # [1, 2, 3, 4] bbb(b) print(b) # [1, 2, 3, 4]
为什么呢,为什么通过函数传参,去修改参数,结果不一致呢?
原因是因为函数传参涉及到了参数副本的创建与拷贝,具体详解:
圆圈2为传参时函数建立的传入变量(圆圈1)的副本,他们拥有共同的指向(圆圈3)。那么显然在函数中,如果将副本重新指向一块新的内存,传入变量(圆圈1)的指向并不会改变,换句话说这种操作并不能影响函数外的变量。
也就是说,源地址和副本地址2个指向相同的地址,这个地址是可以变的list形式, 那么aaa函数只是给这个共同的指向地址的内容中添加了数据,没有改变指向地址,所以结果不变
但是函数bbb,就不一样了,它要修改副本的地址指向,所以就这样了.
参考博客: https://blog.csdn.net/Lin_RD/article/details/88088217