Python:局部变量神秘地更新全局变量

标签 python variables global local

我有一个函数,我在其中使用局部变量,然后在函数完成后传回最终变量。我想记录这个变量在函数之前是什么,但是全局变量与局部变量一起更新。这是我的代码的缩写版本(它很长)

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/

相关文章:

Python Reportlab 多线图下的区域

python - 如何对产品推荐数据集使用 k 均值

python - 如何通过 Python 启动单一服务?

javascript - 在 webbrowser 控件中在 javascript 和 VB .net 之间共享变量

javascript - 函数内 .push 后全局数组未更新

c++ - 如何打印 map ?并使它成为一个全局变量? C++

Python subprocess.Popen 不加入

用于测试 ping 的 Python 函数

c - 从 C 中的变量值中查找变量

Android主项目与库项目-如何在项目之间传递设置