global使用的小问题

1.为什么输出是a而不是空字符,不是用了replace嘛

a ='a'
def bb(n):
    global a
    a.replace(n,'')
bb('a')
print(a)
#输出为a

2,为什么没用global就把全局变量修改了

ls = []
def bb(n):
    ls.append(n)
bb('a')
print(ls)
#输出为['a']

问题一,出在replace方法本身上,这个方法并不改变原来的变量。a.replace是不改变a本身的,一般用作b=a.replace().
问题二,出在list的特性上。对于列表,字典,使用他们本身的方法,是不需要声明全局变量的。

1.第4行代码会产生一个副本并对副本修改,不会对原来的数据进行修改
2.列表在python里本身就是全局的,当然如果在参数中进行指定了就不是了
ps:a本身就是在外面定义的,那么一开始a就是全局变量,无需global来修饰