如何在不更改全局变量的情况下更改分配给全局变量值的局部变量?

How can I change a local variable assigned to the value of a global one without changing the global variable?

这就是我正在使用的代码的基本工作原理。

global Gvar
Gvar = ["Hello"]

def someFunction():
    Lvar = Gvar
    Lvar.append("World")
    print(Lvar)
    print(Gvar)

someFunction()

这会输出 "Hello World" 两次。如何防止在更改局部时更改全局变量?

在此先感谢,我希望有人能帮助我。

这里的问题是下面一行:

Lvar = Gvar

由于 Gvar 是一个列表,因此是一个复杂的数据类型,Python 不会复制值,而是复制对变量的引用。因此,无论您修改 Lvar 还是 Gvar 都不会在这一点上产生影响。相反,您可能想要复制可以通过不同方式实现的值,例如:

Lvar = Gvar[:]

或者,您可以使用 copy module. Check out the Python FAQs 获取更多信息。


为了完成,这是您修改后的代码的样子:

global Gvar
Gvar = ["Hello"]

def someFunction():
    Lvar = Gvar[:]
    Lvar.append("World")
    print(Lvar)
    print(Gvar)

someFunction()

作为旁注,Python 中的变量名称应该是小写的 - 大写通常仅用于 class 定义。

您可以使用 shallow copy 来完成任务 :

global Gvar
Gvar = ["Hello"]

def someFunction():
    Lvar = Gvar.copy()

    Lvar.append("World")
    print(Lvar)
    print(Gvar)

someFunction()

输出:

['Hello', 'World']
['Hello']

您还使用 deepcopy 完成此任务:

import copy
global Gvar
Gvar = ["Hello"]

def someFunction():
    Lvar = copy.deepcopy(Gvar)
    Lvar.append("World")
    print(Lvar)
    print(Gvar)

someFunction()

输出:

['Hello', 'World']
['Hello']

N.B : 如果你使用 Python 2.7.6 然后使用 print Lvar 而不是 print(Lvar)print Gvar print(Gvar).