所以这基本上就是我使用的代码的工作方式。
global Gvar
Gvar = ["Hello"]
def someFunction():
Lvar = Gvar
Lvar.append("World")
print(Lvar)
print(Gvar)
someFunction()
这输出" Hello World"两次。当我更改本地时,如何防止更改全局变量?
提前致谢,我希望有人可以帮助我。
答案 0 :(得分:0)
这里的问题是以下几行:
Lvar = Gvar
由于Gvar
是一个列表,因此是一个复杂的数据类型,因此Python不会复制该值,而是引用该变量。因此,无论您修改Lvar
还是Gvar
,都不会产生任何影响。相反,您可能希望以不同的方式复制可以实现的值,例如:
Lvar = Gvar[:]
或者,您可以使用copy module。有关详细信息,请查看Python FAQs。
完成后,修改后的代码将如下所示:
global Gvar
Gvar = ["Hello"]
def someFunction():
Lvar = Gvar[:]
Lvar.append("World")
print(Lvar)
print(Gvar)
someFunction()
作为旁注,Python中的变量名称应该是小写的 - 大写通常仅用于类定义。
答案 1 :(得分:0)
您可以使用shallow copy
执行htis任务:
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']
NB:如果您使用Python 2.7.6
,请使用print Lvar
代替print(Lvar)
和print Gvar
代替print(Gvar)
。