Python 重新分配/更改全局变量时的变量范围
我在python中遇到了一些行为,我相信这些行为很容易解释,但对我来说仍然很独特。我可以运行一个函数,该函数尝试“更改”全局变量,但由于创建的变量是本地变量,因此没有成功:Python 重新分配/更改全局变量时的变量范围,python,scope,Python,Scope,我在python中遇到了一些行为,我相信这些行为很容易解释,但对我来说仍然很独特。我可以运行一个函数,该函数尝试“更改”全局变量,但由于创建的变量是本地变量,因此没有成功: x = 'n' def make_up(letter): return letter.upper() print x >>> 'n' print make_up(x) >>> 'N' print x >>> 'n' 但是,如果我运行一个函数,修改从全局范围
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]
这种行为的解释是什么?换句话说:为什么我可以从全局范围修改一个列表,但是本地修改的字符串在全局范围内保持不变 此处不涉及变量范围。字符串在Python中是不可变的。所以,当你说
letter.upper()
将使用大写字母创建一个新字符串,并返回该字符串。而在第二种情况下,列表是可变的lst
是对传递的列表的引用,因此pop
会影响实际列表