2014-04-16 121 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影响实际列表。