今天写代码发现了一个bug,具体就不说了,反正调试了半天原因找到了,就是我代码中一个函数作为参数,多次调用这个函数的时候这个参数在改变。我以为传参进去是不会改变这个参数值的,结果改变了,跟我想象的完全不同。具体是这样的。
调用函数用了下面这句话
turn_angle += eva_turns_click(p0, flag, means, stds, real_user)
这里有个参数p0,我后面还需要多次用到,我本意是这个p0在调用这个函数是不会改变的。
但是事实是在函数
eva_turns_click(p0, flag, means, stds, real_user)
中。我用
p_new = p0
来对p_new进行赋值,后面p_new的值会发生改变,因此,当函数返回时,p0的值也会发生改变。这个出乎我的意料啊,于是我把上述代码改成了
p_new = []
for p in p0:
p_new.append(p)
问题解决,p_new的改变不会影响到p0。
结论:
1.用x=y这种方式赋值的时候,我理解x y是共享地址的,当x改变的时候,y也会变。
2.函数传参传的是地址。