重新分配/更改全局变量时的变量范围

时间:2014-04-16 02:34:18

标签: python scope

我遇到了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]

这种行为有什么解释?换句话说:为什么我能够从全局范围修改列表,但是在本地修改的字符串在全局范围内保持不变?

1 个答案:

答案 0 :(得分:0)

此处不涉及变量范围。字符串在Python中是不可变的。所以,当你说

letter.upper()

使用大写字母创建一个新字符串并返回。而在第二种情况下,列表是可变的。 lst是对传递的列表的引用,因此pop会影响实际列表。