先看下一下代码
def c(n):
n[2] = 300
print(n)
return None
pass
def d(n):
n += 100
print(n)
return None
pass
cn = [1,2,3,4,5,6]
dn = 9
print(cn)
c(cn)
print(cn)
print(dn)
d(dn)
print(dn)
运行结果:
[1, 2, 3, 4, 5, 6]
[1, 2, 300, 4, 5, 6]
[1, 2, 300, 4, 5, 6]
9
109
9
可以看出第一个函数给列表传递参数,最终列表的值在全局也发生了变化,而第二个函数给全局变量dn赋新值,但dn的值
在全局未发生变化。
第一个函数里,由于n[2]=300是传址操作,赋值为同一个内存地址的变量,该变量就发生了变化,第二个函数里,n+=100
是传值操作,赋值了一个新的内存地址的变量,所以原先变量未发生改变。