python的全局列表变量

大家知道在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又指向这个区域

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容