栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

Python 学习日记day 20

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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’

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/700807.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号