这是我的第一个问题,所以如果我是一个完全的dweeb张贴这个,让我知道为什么和如何我可以避免它在未来!
我有一些python代码,它们应该只取一个列表,然后将jth组件乘以-1。这是有问题的代码。
def flip(spins,j):
z = spins
z[j] = z[j]*-1
return z
然而,我注意到的是如果我想做
spin = [1,1,1]
test = flip(spin,1)
它会将正确的值[1,-1,1]分配给“test”,但也会将“spin”的值更改为[1,-1,1]。我知道一定有什么明显的东西我正在忽略,但我已经盯着这个2个小时了,仍然看不见。
谢谢你的帮助!
你忘记的是
z
和spins
本质上是同一个对象。两者都指向同一个列表并具有相同的元素。例如:
结果:
要复制列表,请尝试以下操作:
结果:
将两个名称放在同一对象上。这种情况在
num = old_num
中也会发生,但由于您永远无法在原地更改数字(它们是不可变的),所以number = number * -1
之类的东西只会给number * -1
一个标签number
并删除旧的标签。当你这样做的时候
您更改的是z,而不是赋值,这就是为什么这会同时更改标记项的和的原因。你想做的是复印一份,你可以这样做:
所有这些都同样有效。因为这是一个新项目,更改它不会影响原始项目。
在函数内部,
z
和spins
引用同一个列表,该列表的全局名称也是spin
。如果修改其中一个,则这些更改也可以通过其他名称看到。变量z
是多余的。如果你想让
z
成为spins
的副本,那么就做:或:
相关问题 更多 >
编程相关推荐