python函数传参引用_python中,函数参数的传递是值传递还是引用传递?

本文探讨了Python中函数参数传递的本质,指出无论是基本数据类型还是复合数据类型,都是按引用传递。对于不可变数据类型,尽管看起来像是值传递,实际上是创建了新的引用指向相同的内存地址。而对于可变数据类型,函数内部的修改会直接影响到外部变量。文章还提到了Python中0-256整数的内存共享优化,并通过示例展示了不同数据类型的id变化。
摘要由CSDN通过智能技术生成

要理解上述问题,需要明白,在Python中一切皆对象。所以函数的参数在传递过程中,传递的都是对象的引用,而引用是指向内存中的地址的(id()查看的是当前变量的地址值)。

所以上述问题本身都不是特别的严谨,那么为什么还有上述的问题呢?我猜想面试想问的是:python中,函数参数为基本数据类型时,传递的是值传递还是引用传递?

这个是因为在实际使用时,不同的数据类型表现出来的现象是不一样的,但是本质上都是传递的是对象的引用。在实际使用时,因为不可变数据类型是不能改变其内存中的值的,所以表现出来的现象,好像是给不可变数据类型复制了一份再进行传递的,但事实上只是两个不同的变量指向了同一块内存中的地址而已。可变数据类型,因为其在内存中的值是可以改变的,所以在函数内改变可变数据类型的值,是会影响到函数外的变量,因为这两个参数是指向的同一块内存地址的。

题外话:python中,整型(int)值为0-256时是共享内存的(python3.6 windows7 | python3.5 ubuntu18.4 在上面环境上测试,256之后就不再共享地址了,其他机型不知道是不是这样 ),这样做有什么用呢?我的理解是:对于常用整型数据,可以节省内存开销。

l = [1, 2, 3]

t = (1, 2, 3)

b = 2

print('id(l):{}'.format(id(l)))

print('id(l[1]):{}'.format(id(l[1])))

print('id(t[1]):{}'.format(id(t[1])))

print('id(b):{}'.format(id(b)))

print('--------------')

def aaa():

l = [1, 2, 3]

t = (1, 2, 3)

b = 2

print('id(l):{}'.format(id(l)))

print('id(l[1]):{}'.format(id(l[1])))

print('id(t[1]):{}'.format(id(t[1])))

print('id(b):{}'.format(id(b)))

aaa()

bVbGQsE

第一次写博客,如果有写错的地方,请指教!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值