2014-04-16 119 views
0

我正在運行python中的行爲,我確定這很容易解釋,但對我來說仍然很奇怪。我可以運行,試圖「改變」的全局變量,但沒有成功,因爲創建的變量是本地的一個功能:重新分配/更改全局變量時的變量範圍

x = 'n' 

def make_up(letter): 
    return letter.upper() 


print x 
>>> 'n' 
print make_up(x) 
>>> 'N' 
print x 
>>> 'n' 

但是,如果我跑,我修改從全球訪問列表的功能範圍內,全局變量發生變化:

x = [0,1] 

def rem(lst): 
    return lst.pop(0) 

print x 
>>> [0,1] 
print rem(x) 
>>> 0 
print x 
>>> [1] 

這種行爲的解釋是什麼?換句話說:爲什麼我能夠從全局範圍修改列表,但本地修改的字符串在全局範圍內保持不變?

回答

0

此處不涉及變量作用域。字符串在Python中是不可變的。所以,當你說

letter.upper() 

用大寫字母創建一個新的字符串,並返回。而在第二種情況下,列表是可變的。 lst是對傳遞的列表的引用,因此pop影響實際列表。