a = [1, 2, 3] def lop(a): b = [7] a = b[:] lop(a) print(a)
本希望在lop函数内将b列表的值复制到a列表中,但最后的执行效果a没有改变:
[1, 2, 3] [Finished in 0.8s]
这跟python对变量和对象定义的有关,参考
https://www.cnblogs.com/ifantastic/p/3811145.html
在函数lop中,a指向了b的列表,但函数结束后,a仍旧是原来自己的指向列表。
a = [1, 2, 3] def lop(a): print('函数内列表ID1:' + str(id(a))) b = [7] a = b print('函数内列表ID2:' + str(id(a))) print(a) print('函数内列表ID3:' + str(id(a))) print('函数外列表ID1:' + str(id(a))) lop(a) print('函数外列表ID2:' + str(id(a))) print(a)
列表变化:
函数外列表ID1:2241163561864 函数内列表ID1:2241163561864 函数内列表ID2:2241164455240 [7] 函数内列表ID3:2241164455240 函数外列表ID2:2241163561864 [1, 2, 3] [Finished in 0.8s]
所以在函数内需要修改列表,不能通过列表复制的方式,只能修改当前列表的值,pop、append、a[0]=2等操作。