我遇到了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 :(得分:0)
此处不涉及变量范围。字符串在Python中是不可变的。所以,当你说
时letter.upper()
使用大写字母创建一个新字符串并返回。而在第二种情况下,列表是可变的。 lst
是对传递的列表的引用,因此pop
会影响实际列表。