今天做leetcode的题,题中有是不用return返回,直接改变num1的值
我写得呆呆算法是
当输入
num1=[1,2,3,0,0,0], num2=[4,5,6]时返回结果正确
但是当输入
num1=[1,2,3,0,0,0], num2=[2,5,6]时,结果错误
在函数中明明已经变成了
然而在调用函数之后再输出num的值发现它的结果与函数结果不符,而且也不行没有执行函数,因为num比原来多了个2,说明它执行了部分函数。实在想不通这是为什么,是因为没有返回值的函数不能这样用吗?
今天做leetcode的题,题中有是不用return返回,直接改变num1的值
我写得呆呆算法是
当输入
num1=[1,2,3,0,0,0], num2=[4,5,6]时返回结果正确
但是当输入
num1=[1,2,3,0,0,0], num2=[2,5,6]时,结果错误
在函数中明明已经变成了
然而在调用函数之后再输出num的值发现它的结果与函数结果不符,而且也不行没有执行函数,因为num比原来多了个2,说明它执行了部分函数。实在想不通这是为什么,是因为没有返回值的函数不能这样用吗?
因为你在插入时使用了切片方式,相当于将原num1的一部分切片赋给了函数内新建的局部变量num1,所以append的结果反映在外部,但是后续操作的都是局部变量num1所以对原列表就没有了修改效果
你可以把原有的切片复制改写为每次pop一个num1中的末尾0,这样就不会出现浅拷贝问题了
Python 列表深浅复制详解 - 大大大老猫 - 博客园
在文章《Python 数据类型》里边介绍了列表的用法,其中列表有个 copy() 方法,意思是复制一个相同的列表。例如 这时会发现结果是一样的,那么问题来了,我要把 names 列表中的 小黄改成英文
https://www.cnblogs.com/blaomao/p/7239203.html
第一次能正常输出是因为没有走到过
这里,所以没有产生复制效果