函数内修改列表,列表没变,不解啊!

def make_great(人名):
    for i in 人名:
        魔术师2.append('the Great '+i)
    魔术师= 魔术师2[:]
    print (魔术师)
def show_magicians(人名):
    for i in 人名:
        print (i)
魔术师=['汪洋','王洋','王阳','王杨']
魔术师2=[]

make_great(魔术师)
show_magicians(魔术师)
#魔术师=魔术师2[:]
print(魔术师)
print(魔术师2)

<<python编程:从入门到实践>>的第8-10题
函数内已经把列表魔术师2赋值给列表魔术师了 可是和想象的完全不一样呢
今天还看到一个

a='x1'
b='x2'
c={'x1','x3'}
print((b or a)in c)
print((a or b)in c)

这个也想了半天没想明白
自学好费解啊

在函数中 魔术师= 魔术师2[:] 对魔术师变量赋值,不是修改全局变量魔术师的值,而是在函数内再创建一个同名的局部变量。
需要在函数中用
global 魔术师
声明这个函数中的 魔术师是全局变量,再对魔术师变量赋值,才能修改全局变量魔术师的值
代码改成

def make_great(人名):
    global 魔术师     #声明这个函数中的 魔术师 是全局变量,
    for i in 人名:
        魔术师2.append('the Great '+i)
    魔术师= 魔术师2[:]
    print (魔术师)
def show_magicians(人名):
    for i in 人名:
        print (i)
魔术师=['汪洋','王洋','王阳','王杨']
魔术师2=[]
make_great(魔术师)
show_magicians(魔术师)
#魔术师=魔术师2[:]
print(魔术师)
print(魔术师2)

img