码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 关于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的传参方式可以统一的看为“对象引用”,这种方式是传值和传引用的一种综合。

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

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

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

  • 相关阅读:
    【演讲干货满满】共话数智转型之路:斯歌应邀出席2023德莱维数字技术行业峰会
    postman|接口测试 | pre-request script 场景应用
    数据科学技术与应用——第2章 多维数据结构与运算
    如何在Kubernetes中实现微服务应用监控?
    UPLOAD-LABS1
    什么是 React JS 以及为什么要使用它?
    MySQL基础篇之多表查询(内连接、外连接、自连接、子查询、union)
    痞子衡嵌入式:从JLink V7.62开始优化了手动增加新MCU型号支持方法
    C语言 —— 指针
    谣言检测论文精读——3.Detect Rumor and Stance Jointly by Neural Multi-task Learning
  • 原文地址:https://blog.csdn.net/adminwg/article/details/127117071
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号