Python中引用传递参数问题

def func(n, m):
	n = 10 + m

def func2(n, m):
	n[0] = 10 + m
	n[1] = 10 - m

def func3(n, m):
	print("n:", n)  #>>>n: [1, 3, 5]
	n = m
	print("n:", n)  #>>>n: 10

a = 10
b = [1,2,3,4]
c = [1,3,5]
func(a, 2)
func2(b, 5)
func3(c, 10)
print(a)  #>>>10
print(b)  #>>>[15, 5, 3, 4]
print(c)  #>>>[1, 3, 5]

如上代码看出,a变量值没有改变,b数组变量的值发生了改变。

上面a变量和func函数的n参数指向的是不同的内存地址,a变量只是把值赋值给了n参数,a的值并没有改变。

b数组传参到func2函数的n,在func2函数中改变了n数组下标0和1的值,也就是说,在func2函数中,创建出新的值,在列表中赋值,b数组下标0、1引用新的值。

再看c数组和func3函数结果,可以看出,m赋值给n,n指向了新的内存地址,没有有改变数组中的值。

主要注意的是func2和func3的传参,一个是修改数组中的下标值,一个是直接把形参n重赋值,n指向了m传入的值。函数接收的形参中如果为可修改的对象,引用传入的对象,可对参入对象的属性进行修改。当传入为不可修改对象时,传入的参数为赋值传递参数。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值