|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
- def a(x,y):
- x1=x.pop()
- y.append(x1)
- x=[1,2,3]
- y=[]
- print('函数调用前:x=',x,';y=',y)
- a(x,y)
- print('函数调用后:x=',x,';y=',y)
复制代码
- def a(x,y):
- y=x
- x=[]
-
- x=[1,2,3]
- y=[]
- print('函数调用前:x=',x,';y=',y)
- a(x,y)
- print('函数调用后:x=',x,';y=',y)
复制代码
上述两段程序都算是修改列表内容,但是第一个程序在调用函数之后函数外的列表也产生了变化,但是第二段列表在调用函数之后列表依旧为产生变化。两段程序内函数体其实是都已针对于列表进行了操作。为什么会出现这样的差异。求高手指点。。。。
本帖最后由 sunrise085 于 2020-9-12 22:11 编辑
因为第一段程序中,是修改的可变类型对象list;第二段程序中是定义的可变类型对象list
在函数中直接修改可变类型对象,不需要用global指出是全局变量,但是在函数中若重新定义可变类型对象,则需要用global指出是全局变量,否则就是局部变量。你可以在函数内外分别加上print(id(x),id(y))看看
可以看看我这个帖子(Python细节之7、global与nonlocal的使用)的第四部分
|
|