在此之前先来看看变量和对象的关系:Python 中一切皆为对象,数字是对象,列表是对象,函数也是对象,任何东西都是对象。而变量是对象的一个引用(又称为名字或者标签),对象的操作都是通过引用来完成的。例如,a = []是一个空列表对象,变量 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

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:778463939
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
def test2(p):
p = "i in test2"
print(p,id(p))
str = "hello word"
test2(str)
print(str,id(str))

输出:

i in test2 2885210784112
hello word 2885210784048

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

总结:

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

python传参是传值还是传引用相关推荐

  1. 2021-01-14python函数传参是传值还是传引用? 参数若是简单类型是传值 若是对象类型则是传引用,python是兼容两者传参方式的

    python函数传参是传值还是传引用? 首先还是应该科普下函数参数传递机制,传值和传引用是什么意思? 函数参数传递机制问题在本质上是调用函数(过程)和被调用函数(过程)在调用发生时进行通信的方法问题. ...

  2. python函数传值还是地址_python中给函数传参是传值还是传引用

    首先还是应该科普下函数参数传递机制,传值和传引用是什么意思? 函数参数传递机制问题在本质上是调用函数(过程)和被调用函数(过程)在调用发生时进行通信的方法问题.基本的参数传递机制有两种:值传递和引用传 ...

  3. 08 java中方法传参的传值与传址问题

    个人介绍 大家好我是:一颗松 认真分享技术,记录学习点滴 如果分享对你有用请支持我哦 点赞:留言: 收藏: 个人格言: 想法落实的最佳时机就是现在! :::info

  4. vue 组件之间传值 父转子,子传父,同级别之间的传参,跨级别传参

    写这篇文章之前,我对vue组件之间的传值,还是只知道一些基础的传值方式.虽然工作中勉强能够应对,但是想要行云流水感觉还是心有余而力不足,所以在此,我想总结一下vue组件之间的一些传值方式供大家参考,同 ...

  5. go语言传参是值传递还是引用传递

    曾经在某次go面试中被面试官问到:"go中引用类型有哪些?",我答到:"slice,map,channel",面试官:"其实go没有引用类型,都是值类 ...

  6. JS函数传参时:值传递与引用传递的区别

    JS函数传参时:值传递与引用传递的区别 一.先分析基础数据与复杂数据的区别 : 基本数据类型:Undefined.Null.Boolean.Number.String 引用数据类型:对象 如:var ...

  7. 论JS函数传参时:值传递与引用传递的区别

    JS函数传参时:值传递与引用传递的区别? 值传递:值传递的数据为基本数据类型,基本数据类型在内存中存放的是数值本身:值传递为单向传递,只能由实参传递给形参. 引用传递:引用传递的数据为复杂数据类型,复 ...

  8. java void传参,Java中的传参

    变量有两种类型根本类型和类类型 参数也是变量,所以传参分为 根本类型传参 类类型传参 过程1:根本类型传参 根本类型传参 在办法内,无法修改办法外的根本类型参数 publicclassHero{ St ...

  9. vue组件间通信传递数据的四种方式(路由传参、父子组件传参、兄弟组件传参、深层次传参)

    前言: vue组件间通信对于经常来写vue的伙伴来说应该是很轻松的,对于一些刚入门的伙伴来说可能就有些迷茫,感觉方式有很多种,但是总结起来又不知道应该怎么说,在下面的文章中,我结合自己的开发过程中经常 ...

最新文章

  1. 测试驱动陷阱,第2部分
  2. 别只关注GPT3!细如发丝的模型更具现实杀伤力!
  3. VS2010中编写x64汇编的具体方法
  4. MIT6.830 lab1 SimpleDb 实验报告
  5. 计算机的组成 —— 耳机与音响
  6. python爬虫怎么翻页_python爬虫怎么实现翻页
  7. android使用tcpdump抓包
  8. JavaScript广告图片跟随滚动
  9. innerHTMLinnerText区别
  10. GitGitHub入门基础
  11. XBee SX/XTC/XTend 长距离通信产品
  12. 阿里云盘映射webdav操作
  13. android源码分析
  14. java如何将网页表格导出为excel
  15. K8S中deployment和service案例
  16. 软硬兼济,施耐德电气加速工业数字化转型
  17. 异或运算 ^(xor)小解
  18. 《定时执行专家 5.4》版 - 更新内容及下载连接
  19. 安卓手机开启U盘调试模式
  20. Sec-Fetch-*请求头,了解下?

热门文章

  1. virsh KVM管理工具
  2. Oracle调用接口(OCI)源码剖析(2):执行SQL语句并获取结果
  3. MHA故障切换和在线手工切换原理
  4. 基于zxing生成与解析二维码、条形码
  5. WiFi安全之WPA介绍
  6. Eclipse 3.7 安装Maven插件时报错:requires 'bundle org.slf4j.api 1.6.2' but it could not be found...
  7. IaaS、PaaS和SaaS 公司都做些什么
  8. 一个简单的动态内表alv案例
  9. OLAP是什么意思?
  10. SAP 打开SAP物料帐期和财务账期