我有一个函数,我在其中使用局部变量,然后在函数完成后传回最终变量。我想记录这个变量在函数之前是什么,但是全局变量与局部变量一起更新。这是我的代码的缩写版本(它很长)
def Turn(P,Llocal,T,oflag):
#The function here changes P, Llocal and T then passes those values back
return(P, Llocal, T, oflag)
#Later I call the function
#P and L are defined here, then I copy them to other variables to save
#the initial values
P=Pinitial
L=Linitial
P,L,T,oflag = Turn(P,L,T,oflag)
我的问题是 L 和 Linitial 都在更新 Llocal 时更新,但我希望 Linitial 不变。 P 没有改变,所以我对这里发生的事情感到困惑。帮助?谢谢!
勇敢者的完整代码在这里:https://docs.google.com/document/d/1e6VJnZgVqlYGgYb6X0cCIF-7-npShM7RXL9nXd_pT-o/edit
最佳答案
问题在于 P 和 L 是名称
,绑定(bind)
到对象
,而不是值本身。当您将它们作为参数传递给函数时,实际上是将绑定(bind)的副本传递给 P 和 L。这意味着,如果 P 和 L 是可变对象,则对它们所做的任何更改都将在函数调用之外可见.
您可以使用 copy模块保存名称值的副本。
关于Python:局部变量神秘地更新全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14046436/