Python函数正在改变我的输入值,我无法弄清楚为什么

aet*_*etb 5 python input function

这是我的第一个问题,所以如果我是一个完整的dweeb帖子,请告诉我为什么以及如何在将来避免它!

我有一些python代码,只需要一个列表,并将第j个组件乘以-1.这是有问题的代码.

def flip(spins,j):
    z = spins
    z[j] = z[j]*-1
    return z
Run Code Online (Sandbox Code Playgroud)

但是,我注意到的是,如果我尝试做类似的事情

spin = [1,1,1]
test = flip(spin,1)
Run Code Online (Sandbox Code Playgroud)

它会将适当的值[1,-1,1]分配给'test',但它也会将'spin'的值改为[1,-1,1].我知道必须有一些非常明显我忽视的东西,但我一直盯着它看了2个小时但仍然看不到它.

谢谢你的帮助!

kin*_*all 7

在您的函数内部,zspins引用相同的列表,该列表也称为全局名称spin.如果您修改了一个,那么通过其他名称也可以看到这些更改.变量z是多余的.

如果你想z成为一个复制spins,然后就去做:

z = spins[:]
Run Code Online (Sandbox Code Playgroud)

要么:

z = list(spins)
Run Code Online (Sandbox Code Playgroud)

  • 正确的。函数参数引用传入的同一对象。如果您不更改参数引用的对象(专门使用 `=`),那么它仍然是传入的同一对象,并且您所做的任何更改都可以看到由呼叫者 (2认同)