为什么没有结果输出?
def make_great(magicians):
great_magicians = []
while magicians:
magician = magicians.pop()
great_magician = magician + " the Great"
great_magicians.append(great_magician)
magicians = great_magicians[:]
m = ['lucifer', 'lily', 'teena']
make_great(m)
print(m)
[]
当把magicians = great_magicians[:] 替换为:
for great_magician in great_magicians:
magicians.append(great_magician) 后
能正常输出为函数修改数据后的结果,
比较以下两段代码,第10行的赋值运算,在赋值前后它们的id不同了。相当于重新声明了一个变量,只是同名
def make_great(magicians):
great_magicians = []
while magicians:
magician = magicians.pop()
great_magician = magician + " the Great"
great_magicians.append(great_magician)
print(id(magicians))
magicians = great_magicians[:]
print(id(magicians))
m = ['lucifer', 'lily', 'teena']
make_great(m)
print(m)
print()
def make_great(magicians):
great_magicians = []
while magicians:
magician = magicians.pop()
great_magician = magician + " the Great"
great_magicians.append(great_magician)
print(id(magicians))
for great_magician in great_magicians:
magicians.append(great_magician)
print(id(magicians))
m = ['lucifer', 'lily', 'teena']
make_great(m)
print(m)
上面的想多了,把等号=换成+=就可以了
你这是变量的问题,你没有搞清楚全局变量和局部变量
def make_great(magicians):
great_magicians = []
while magicians:
magician = magicians.pop()#magician只是在这个函数中的局部变量而已,这个list不是高维list,一般的复制方式都可以
great_magician = magician + " the Great"
great_magicians.append(great_magician)
global m#声明m为全局变量
m = great_magicians[:]
m = ['lucifer', 'lily', 'teena']
make_great(m)
print(m)