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等操作。