Python 学习日记day 20

函数:

函数的传递:

                实参到形参的赋值操作。python中一切皆对象,所有赋值操作都是‘引用的赋值’所以,python中的参数传递都是引用传递,不是值传递。具体操作入下:
            1.对可变对象进行‘写操作’,直接作用于对象本身。
            2.对不可变对象进行‘写操作’,会产生一个新的‘对象空间’,并用新的值填充这块空间(起到其它语言的值传递效果但不是值的传递)

可变对象:字典,列表,集合,自定义对象。。。
不可变对象: 数字,字符串,元组,function等


可变对象的传递:

b=[10]
print('b',id(b))
def f2(m):
	print('m',id(m))
	m.append(30)
 
f2(b)
print("b",id(b))
print('b',b)
 
#结果:
b 3052882874880
m 3052882874880
b 3052882874880
b [10, 30]

在实参b赋值给形参m之后b所对应的地址与m所对应的地址一致即‘3052882874880’堆中的对应属性为‘10’,在函数变化中列表新增加了元素‘30’后由于列表为可变序列所以地址不变但列表值发生改变,即b所对应的堆的id中的属性变为[10,30]。

不可变对象的传递:

b=10
print('b',id(b))
def f2(m):
	print('m',id(m))
	n=m+100
	print('n',id(n))
 
f2(b)
print("b",id(b))
print('b',b)
 
 
 
结果:
b 1576936210960
m 1576936210960
n 1576936214160
b 1576936210960
b 10

在不可变对象中,若实参赋值给形参,栈中的实参在堆中的地址会赋值给栈中的形参。但在函数内部的局部参数的‘n’由于不可改变原位置的属性,所以会重新选择一个位置进行储存新属性,所以‘n’的位置会发生改变,由于m和b的id不变并且属性不变所以输出的b依旧为‘10’

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值