关键词搜索

源码搜索 ×
×

python基础入门教程:传参是传值还是传引用

发布2021-01-20浏览241次

详情内容

在此之前先来看看变量和对象的关系:Python 中一切皆为对象,数字是对象,列表是对象,函数也是对象,任何东西vb.net教程
都是对象。而变量是对象的一个引用(又称为名字或者标签),对象的操作都是通过引用来完成的。例如,a = []是一个空列表c#教程对象,变量 a 是该对象的一个引用
例1

def test(c):
 c.append("hello world")
 print(c,id(c))
 return
list = [1,2]
test(list)
print(list,id(list))

    输出

    [1, 2, ‘hello world’] 2463790879240
    [1, 2, ‘hello world’] 2463790879240
    在执行test函数前,列表list和参数c都指向同一个对象,执行test时并没有重新赋值,也没有新的指向过程,append方法只是对列表对象插入一个元素,对象还是原来的对象,只是对象里面的内容变了,因为参数c和列表list都是绑定同一个对象上,执行c.append和list.append方法本质都是对一个对象进行操作,因此list列表在调用函数后发生了变化,但id没变,还是原来那个对象。因此,如果函数收到的是一个可变对象(比如字典或者列表)的引用,就能修改对象的原始值--相当于通过“传引用”来传递对象

    例2

    def test2(p):
    p = "i in test2"
    print(p,id(p))
    str = "hello word"
    test2(str)
    print(str,id(str))
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    输出:

    i in test2 2885210784112
    hello word 2885210784048
    id不一样,所以说不是同一个对象,也就是说我们传的还是python基础教程引用。因此,如果函数收到的是一个不可变对象(比如数字、字符或者元组)的引用,就不能直接修改原始对象--相当于通过“传值’来传递对象。

    总结:

    Python参数传递采用的肯定是“传对象引用”的方式。这种方式相当于传值和传引用的一种综合。如果函数收到的是一个可变对象(比如字典或者列表)的引用,就能修改对象的原始值--相当于通过“传引用”来传递对象。如果函数收到的是一个不可变对象(比如数字、字符或者元组)的引用,就不能直接修改原始对象--相当于通过“传值’来传递对象。

    相关技术文章

    点击QQ咨询
    开通会员
    返回顶部
    ×
    微信扫码支付
    微信扫码支付
    确定支付下载
    请使用微信描二维码支付
    ×

    提示信息

    ×

    选择支付方式

    • 微信支付
    • 支付宝付款
    确定支付下载