关于python里传值和传址

先看下一下代码

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
是传值操作,赋值了一个新的内存地址的变量,所以原先变量未发生改变。

猜你喜欢

转载自www.cnblogs.com/MiziHa/p/9334283.html
今日推荐