一 参数是字符串(以及数字和元组)
字符串(以及数字和元组)是不可变的,无法被修改即只能被新值覆盖
1 def change(n): 2 n=‘gumby‘ 3 4 name=‘entity‘ 5 change(name) 6 print(name) 7 #输出 entity
如果想要更改name 需要函数change(n)加上return n;将name重新赋值(name=change(name))
n声明在函数内 所以函数结束后 n 就会消失
二 参数是可变的数据结构
例如 列表·
1 def try_to_change(n): 2 n[0]=‘mr.gumby‘ 3 4 name=[‘mrs.sisly‘,‘six‘] 5 try_to_change(name) 6 print(name) #[‘mr.gumby‘, ‘six‘]
在这里,可变的数据结构作为参数明显地发生了改变,为了不让原先的列表name发生变化,我们需要一个name的副本;
而 当序列做切片的适合,返回的切片总是一个副本。
1 name=[‘mrs.sisly‘,‘six‘] 2 n=name[ : ]
现在n 和 name 是两个独立的列表,其值相等,并且改变其中一个不会影响到另外一个,
1 def try_to_change(n):
2 n[0]=‘mr.gumby‘
3 print(n)
4 name=[‘mrs.sisly‘,‘six‘]
5 try_to_change(name[:])
6 print(name)
结果:
1 # [‘mr.gumby‘, ‘six‘] n 2 # [‘mrs.sisly‘, ‘six‘] name