python中的引用传参

python语言的参数传递是引用传递,即被调用函数中修改了形式参数值,调用函数的实际参数值也被改变。函数调用时,调用函数把实参变量的“地址”传给形参,整个执行期间实参和形参共用同一地址的存储单元,实参和形参其实就是一个,被调函数对形参的任何操作都等同于对实参的操作,因此实参值会随着被调用函数的形参值的改变而改变。

python中:对于不可变类型:因变量不能修改,所以运算不会影响到变量自身;

     对于可变类型:函数体内的运算有可能会更改传入的实参值

引用传参一:

a = 100  # 这里的a是不可变类型


def test(a):
    a += a
    # 这个式子有两层含义:1.这里可能是重新定义一个新的变量a,2.也有可能是修改a的值
    # 但由于全局变量a不能修改,所以此处是重新了一个a
    print("函数内:", a, id(a))


test(a)
print("函数外:", a, id(a))

函数内: 200 1572488560
函数外: 100 1572486960

引用传参二:

a = [100]  # 这里的a是一个列表,是可变类型


def test(a):
    a += a  # 由于a是可变类型,所以这里是修改a
    print("函数内:", a, id(a))


test(a)
print("函数外:", a, id(a))

函数内: [100, 100] 20268456
函数外: [100, 100] 20268456

引用传参三:

a = 100  # 这里的a是不可变类型


def test(a):
    a = a + a  # 最初为了好理解,所以可以认为a+=a等价于a=a+a,所以这里同引用传参一
    print("函数内:", a)


test(a)
print("函数外:", a)

函数内: 200
函数外: 100

 引用传参四:

a = [100]  # 这里的a是一个列表,是可变类型


def test(a):
    a = a + a       #对于这种情况,等号左边的a是重新定义的一个量,此时a=a+a与a+=a不一样
    # 1.先算=右边的
    # 2.算出来的结果是[100100]
    # 3.a=[100,100]
    # 4.让a变量指向了[100,100],即a保存的是【100,100】的引用(内存地址)
    print("函数内:", a)


test(a)
print("函数外:", a)

函数内: [100, 100]
函数外: [100]

 

转载于:https://www.cnblogs.com/wuweixiong/p/10009603.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值