Python这东西是能给人带来持续性的快感的,不过最近出现一个小问题,第一次带来了“匪夷所思”的感浇。
代码如下:
def listFn(li = [1,2]):
li.append('!')
print li
连续5次执行listFn()得到的结果让我史料未及—— TMD默认参数居然也是可以被修改的!!!!!!
Python list继承了C++的数组的指针特性所以修改行参的时候实参也跟着变了还是可以理解的,但默认参数怎么也把持不住跟着变了呢?
当list类型做为默认参数时,会出现这个情况。
解决办法就是在函数内部li=list(li), 这样li==li,但是li is not li.修改内部的li时就不会修改参数上的li了。