python的引用传递和值传递

函数的引用传递:对于函数输入的参数对象,函数在执行过程中对对象本身进行操作;在执行结束后参数对象有可能发生改变函数的值传递:对于函数输入的参数对象,函数执行中首先生成对象的一个副本,并在执行过程中对副本进行操作。执行结束后对象不发生改变。

python中不可选择函数是引用传递(pass by reference)或者值传递(pass by value)。具体而言,python的函数所使用的方式是pass by assignment,属于引用传递还是值传递由对象本身的性质所决定。

之前有博文认为python的函数参数属于引用传递还是值传递由对象本身的性质所决定,如果传入对象为可变对象,如list或dict,则可以在函数中修改对象元素值。如果为不可变对象,如tuple和str,则无法修改对象,其实这是一种误解。事实上,即使是list或dict也无法在函数内使用=直接对其赋值。

如下例:

a =[1,2]
def clear(a):
   a = []
clear(a)
print(a)                #a的值仍为[1,2]

而以下函数则可清空list:

a = [1,2]
def clear(a):
    while a:
        a.pop()
clear(a)
print(a)                 #a的值为[]
python的函数在其内部仅能调用参数对象本身的方法。若参数对象有改变自身的方法(如list,dict或者其它)则参数对象有可能在函数内部被改变;若参数对象没有改变自身的方法,则函数无法修改参数对象的值。
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值