python中函数的传参
首先砸门要知道,在python里一切皆为对象!python是对象引用传递。
“虽然 Python 官方只有一种传递方式,但为了好理解,咱们暂时把不可变对象的表现类比为值传递,把可变对象的表现类比为引用传递。👍”往后看会解释的,大佬❤️
理解一下下面的话。
变量 是 标签,对象 是 实体,传参 是 复制标签(也就是复制地址)。
什么意思呢?🤪
举个栗子😋
a=114514 这句话干了什么?
首先创建了”114514“的内存地址,将这个恶臭值塞了进去。此时将这块内存地址当作一个盒子,接着python就会把”a”这个标签贴到了盒子上。
这个过程就解释了:变量 是 标签,对象 是 实体(这里的对象是114514这个整型对象哦!)
变量相当于一个标签,而对象才是真实数据哦!
那么这个时候就有人要问了,猪宝猪宝,对象到底是什么,分为哪几种嘞?
对象以及区别
python里的对象分为两类可变对象:list,dict,set,bytearray不可变对象:int,float,str,tuple,bool,frozenset对于不可变对象!可以理解为值传递,外面的不会受影响
a=10print("外部a的地址",id(a))def aaa(n): print("函数内参数的地址",id(n)) n=20 print("赋值之后参数的地址",id(n))aaa(a)print("函数操作之后的地址",id(a))
#输出如下外部a的地址 140728360428744函数内参数的地址 140728360428744赋值之后参数的地址 140728360429064函数操作之后的地址 140728360428744砸门可以看到,外部和函数内参数以及函数操作之后的地址是一样的。
原理上面已经解释啦。变量只是个标签而已。
a=10依旧是创建10的内存地址,把10放进去。然后贴上a,n(ps:这个n是函数的参数,aaa(10)也是个赋值操作,相当于n=10)标签。😋
至于这个“赋值之后参数的地址 140728360429064`,地址变了是因为这是”20”的地址,n标签被贴在了20上面,自然也就是输出的20的地址啦。
对于可变对象来说,可以理解为引用传递,外面的会受影响
b=[1,2]print("外部b的地址",id(b))def bbb(n): print("函数内参数的地址",id(n)) b.append(2) # n = [1, 2, 3, 4] <-- 如果是这样赋值,那就变成情况和上面一样了! print("赋值之后参数的地址",id(n))bbb(b)print("函数操作后b的地址",id(b))#输出外部b的地址 2536538090816函数内参数的地址 2536538090816赋值之后参数的地址 2536538090816函数操作后b的地址 2536538090816你会好奇为什么四个地址都是一样的吗?结合我上面讲的变量只是个标签想想💕
注意!b 是【可变对象】(列表)。它的内存地址在 b=[1,2] 时就被创建了,后续所有操作(比如 append)都是直接在这个盒子里塞东西,盒子本身的地址(门牌号)根本没变! 换句话说,b就是个数据容器而已。

码字真累,妥协了,不知道我还能坚持写多久博客🤡,希望这篇文章能帮到大佬们哈!ciallo!(๑•̀ㅂ•́)و✧❤️❤️❤️❤️
部分信息可能已经过时









