网站首页 > java教程 正文
按值传递和按引用传递是两种基本的参数传递机制,它们的主要区别在于如何处理方法调用时所传递的参数。
这两个概念非常容易混淆,今天我们来好好聊聊这个问题。
变量、引用和对象
首先,我们先区分下这三个概念:变量、对象和引用,使用比喻最好理解。
变量就像一张白纸。你可以在上面写内容。
引用就像白纸上写上的家庭地址。通过家庭住址能够找到我家。
对象就像我家。
按值传递和按引用传递
按值传递:当参数以按值传递的方式传递给函数或方法时,会创建参数的一个副本(即原始数据的拷贝),并将这个副本的值传递给函数。在函数内部对参数所做的任何修改都不会影响到原始数据。
按引用传递:当参数以按引用传递的方式传递给函数或方法时,实际上是将参数的地址(引用)传递给了函数。这意味着在函数内部直接操作的是原始数据的存储位置,因此对参数的任何修改都会直接影响到原始数据。
Python是按值传递还是按引用传递?
Python既不是按值传递,也不是按引用传递,而是按赋值传递(对象引用传递)。
注意,Python中一切皆对象,所以一定不是按值传递。Python这种参数传递方式和按引用传递很像,但有所不同。
例如,看下面一段代码:
class Dog:
pass
def play(dog):
pass
d = Dog()
play(d)
当调用play(d)的时候发生了什么?
是的,当调用play(d)的时候,创建了一个新的引用并赋值给形参变量dog。
那它和传统的按引用传递有何不同?来看看引用传递示意图:
总结
Python是按赋值传递(对象引用传递),在函数内部对形参变量所指向的对象进行修改时,如果对象是可变的,那么会直接修改对象;否则,Python会创建对象副本并修改,然后让变量指向新创建的对象副本。
注:原创文章,请勿搬运。文章来源自己的学习理解,如有错误,请批评指正。
猜你喜欢
- 2024-11-11 挨个举例子告诉你Java中的参数传递,我就不信你还不明白了
- 2024-11-11 Java值传递机制(java传值方式)
- 2024-11-11 Java面试-为什么 Java 只有值传递?
- 2024-11-11 Stack Overflow上188W+程序员都关注的问题
- 2024-11-11 为什么说Java不存在引用传递?(javax不存在)
- 2024-11-11 一份2021年的java面试题(java常见面试题)
- 2024-11-11 互联网大厂面试系列-为什么说在Java方法参数调用只有值传递呢?
- 2024-11-11 一文搞懂参数传递原理(参数传递的三种方式)
- 2024-11-11 Java程序员想年后跳槽,对JVM没有深入的理解,我劝你还是别跳了
- 2024-11-11 JAVA校招题基础知识点复习第二天(引用传递的本质是什么?)
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)