大家知道在python中,对一个非列表、字典的变量,对与全局变量同名的局部变量进行修改,不会影响全局变量。如果局部变量以全局变量进行赋值,就更加不会出现“修改了局部影响到全局”
A = "a"
def test():
B = A
B = "b"
print B
print A
print A
但是,如果这个变量是全局 列表,字典,元组,就有点复杂了
如代码1
HEADER =["A","B"]
print HEADER[0],
def test():
t_h = HEADER
t_h[0] = "C"
print t_h[0],HEADER[0],
test()
print HEADER[0]
结果是 A C C C
发现两点
1、在局部,不需要用global进行显式指明是全局变量
2、=不是一个赋值,而更像是指针指向这个全局变量
而下面这样
代码2
HEADER =["A","B"]
print HEADER[0],
def test():
t_h = HEADER
t_h = ["C","B"]
print t_h[0],HEADER[0],
test()
print HEADER[0]
结果是 A C A A
问题的就是是否对 局部变量进行了显式赋值,或者说是给了一个明确的值
在代码1里,t_h = HEADER可以理解为把 HEADER的 内存地址给了 t_h,所以对t_h[0]进行操作时,会影响到全局列表值。
而在代码2里,因为进行了 t_h = ["C","B"] 操作,这样就值在内存里又产生了一个 值为["C","B"]的内存区域,t_h又指向这个区域