如何在不更改全局变量的情况下更改分配给全局变量值的局部变量?
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)
.
这就是我正在使用的代码的基本工作原理。
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)
.