• 关于python的传参


    可变类型传参(列表)

    1. def change_list(li, num, val):
    2. li[num] = val
    3. l1 = [1, 2, 3, 4]
    4. change_list(l1, 3, 5)
    5. print(l1)
    6. #结果
    7. [1, 2, 3, 5]

    由这里可以看出,python对于可变参数的传参方式为对象引用,假如l1在创建时指向的是内存的地址为A1.  即这里的传参相当于 li = l1>>A1 , 此时li l1指向同一块内存地址,所以li改变l1也改变。

    其实所谓的改变实质是改变列表中存储的内存地址,创建列表l1,则会在内存中开辟一块A1的内存地址,然后再开辟四块内存地址分别存储值[1,2,3,4],然后A1中分别存储这四个值的内存地址。当将列表中的4改变为5时,其实是开辟一块内存地址,存储值5, 而原来存储值4内存地址的内存地址,现在改为存储指向值5的内存地址

     不可变类型传参(字符串)

    1. def change_string(s, num, val):
    2. s[num] = val
    3. s = 'abc'
    4. print(change_string(s, 2, 'd'))
    5. print(s)
    6. #结果
    7. TypeError: 'str' object does not support item assignment

    报错:因为字符串是不可变类型,我们不能直接更改原对象

    改为如下代码:

    1. def change_string(s, num, val):
    2. new_s = ''
    3. for index, value in enumerate(s):
    4. if index == num:
    5. value = val
    6. new_s += value
    7. return new_s
    8. s1 = 'abc'
    9. print(change_string(s1, 2, 'd'))
    10. print(s1)
    11. # 结果
    12. abd
    13. abc

    由这里可以看出,python对于不可变类型的传参方式可以看为传值,因为不可对源对象进行修改,只能用源对象的值

    总结

    python的传参方式可以统一的看为“对象引用”,这种方式是传值和传引用的一种综合。

    但是区分:可变参数或不可变参数。

    如果是可变参数(列表,字典,集合)则相当于传引用的方式,可以对原始的对象进行修改。

    如果是不可变参数(字符串、数字)等,则相当于传值的方式。不可以对原对象进行修改

  • 相关阅读:
    调度算法1
    黑客(网络安全)技术自学30天
    python机器学习之梯度下降法
    GBase8s数据库标识连接
    IT项目管理的“金科玉律”是否可信
    从服务器指定位置下载文件
    一文搞懂序列密码
    Excel 函数大全应用,包含各类常用函数
    java计算机毕业设计ssm宠物店管理系统(源码+系统+mysql数据库+Lw文档)
    在字节跳动和滴滴干了5年测试,月薪25K,熬夜总结出来的划水经验.....
  • 原文地址:https://blog.csdn.net/adminwg/article/details/127117071