python的全局列表變量

大家知道在python中,對一個(gè)非列表、字典的變量,對與全局變量同名的局部變量進(jìn)行修改,不會影響全局變量。如果局部變量以全局變量進(jìn)行賦值,就更加不會出現(xiàn)“修改了局部影響到全局”

A = "a"
def test():
      B = A
      B = "b"
      print B
      print A
print A

但是,如果這個(gè)變量是全局 列表,字典,元組,就有點(diǎn)復(fù)雜了
如代碼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]

結(jié)果是 A C C C
發(fā)現(xiàn)兩點(diǎn)
1、在局部,不需要用global進(jìn)行顯式指明是全局變量
2、=不是一個(gè)賦值,而更像是指針指向這個(gè)全局變量

而下面這樣
代碼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]

結(jié)果是 A C A A

問題的就是是否對 局部變量進(jìn)行了顯式賦值,或者說是給了一個(gè)明確的值

在代碼1里,t_h = HEADER可以理解為把 HEADER的 內(nèi)存地址給了 t_h,所以對t_h[0]進(jìn)行操作時(shí),會影響到全局列表值。
而在代碼2里,因?yàn)檫M(jìn)行了 t_h = ["C","B"] 操作,這樣就值在內(nèi)存里又產(chǎn)生了一個(gè) 值為["C","B"]的內(nèi)存區(qū)域,t_h又指向這個(gè)區(qū)域

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容