mobile wallpaper 1mobile wallpaper 2mobile wallpaper 3mobile wallpaper 4mobile wallpaper 5mobile wallpaper 6
697 字
2 分钟
python中的函数传参
2026-03-11

python中函数的传参#

首先砸门要知道,在python里一切皆为对象!python是对象引用传递。 “虽然 Python 官方只有一种传递方式,但为了好理解,咱们暂时把不可变对象的表现类比为值传递,把可变对象的表现类比为引用传递。👍”往后看会解释的,大佬❤️ 理解一下下面的话。
变量 是 标签,对象 是 实体,传参 是 复制标签(也就是复制地址)。 什么意思呢?🤪

举个栗子😋#

a=114514 这句话干了什么?

首先创建了”114514“的内存地址,将这个恶臭值塞了进去。此时将这块内存地址当作一个盒子,接着python就会把”a”这个标签贴到了盒子上。

这个过程就解释了:变量 是 标签,对象 是 实体(这里的对象是114514这个整型对象哦!)

变量相当于一个标签,而对象才是真实数据哦!

那么这个时候就有人要问了,猪宝猪宝,对象到底是什么,分为哪几种嘞?

对象以及区别#

python里的对象分为两类
可变对象:list,dict,set,bytearray
不可变对象:int,float,str,tuple,bool,frozenset

对于不可变对象!可以理解为值传递,外面的不会受影响

a=10
print("外部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就是个数据容器而已。

1

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

分享

如果这篇文章对你有帮助,欢迎分享给更多人!

python中的函数传参
https://mizuki.mysqil.com/posts/chuancan/
作者
神秘大胖狗
发布于
2026-03-11
许可协议
CC BY-NC-SA 4.0

部分信息可能已经过时

封面
Sample Song
Sample Artist
封面
Sample Song
Sample Artist
0:00 / 0:00