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

要理解上述问题,需要明白,在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

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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值