Python传参机制

最近在写用python写一个project,由于半吊子python水平,着实踩了不少坑…

从这一篇开始,以后遇到坑就积累下来

python 传参机制

望指正。

python的传参机制与我之前学习的语言中传值、传引用都不一样,也可以说是将二者相结合
python传参的时候传的的是对象

  1. 对于不可变变量,比如int 、float 、tuple等,函数内部改变值并不会改变外部的值,所以可以放心传参进去,return回来:
    def double (a) :
    	a = a + a
    	return a
    a = 1
    b = double(a)
    >> a = 1 # a 的值不会改变
    >> b = 2
    
  2. 对于可变变量,比如list等,就很麻烦,传的是引用,而不是list的复制,如果用id()在函数内外测试,会发现id是一样的,即他们都指向了同一个内存地址,改变就会都改变
    def double (a) :
    	a[0] = a[0] + a[0]
    a = [1]
    double(a)
    >> a = [2] # a 的值改变
    
    
    但很多时候,我们希望的是直传一个复制进去,不想让函数的执行影响到外部的变量
    • 对于简单的不可变变量可以这样操作(浅复制)

      a = [1]
      b = a[:]
      double(b)

      即先复制在传参进去

    • 对于复合型可变变量需要深复制:

      • deepcopy()是python提供的函数,可以实现深复制,即了list元素是list也可以一起复制。
        如果只是浅复制,就会出现最外层被复制,里层的list仍然是引用类型,指向同一个的内存地址
        但听说这个方法是比较消耗系统资源的,如果对运行速度空间要求高,应该谨慎使用
      • 如果明确知道是几层复合,不嫌麻烦,可以自己写深复制,即for循环浅复制,一层层的复制出来
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值