优秀的编程知识分享平台

网站首页 > 技术文章 正文

什么是按值传递和按引用传递,Python属于哪一种?

nanyue 2024-10-22 13:12:30 技术文章 4 ℃

按值传递和按引用传递是两种基本的参数传递机制,它们的主要区别在于如何处理方法调用时所传递的参数。

这两个概念非常容易混淆,今天我们来好好聊聊这个问题。

变量、引用和对象

首先,我们先区分下这三个概念:变量、对象和引用,使用比喻最好理解。


变量就像一张白纸。你可以在上面写内容。

引用就像白纸上写上的家庭地址。通过家庭住址能够找到我家。

对象就像我家。


按值传递和按引用传递

按值传递:当参数以按值传递的方式传递给函数或方法时,会创建参数的一个副本(即原始数据的拷贝),并将这个副本的值传递给函数。在函数内部对参数所做的任何修改都不会影响到原始数据。

按引用传递:当参数以按引用传递的方式传递给函数或方法时,实际上是将参数的地址(引用)传递给了函数。这意味着在函数内部直接操作的是原始数据的存储位置,因此对参数的任何修改都会直接影响到原始数据。

Python是按值传递还是按引用传递?

Python既不是按值传递,也不是按引用传递,而是按赋值传递(对象引用传递)。

注意,Python中一切皆对象,所以一定不是按值传递。Python这种参数传递方式和按引用传递很像,但有所不同。


例如,看下面一段代码:

class Dog:
    pass

def play(dog):
    pass
    
d = Dog()
play(d)

当调用play(d)的时候发生了什么?

是的,当调用play(d)的时候,创建了一个新的引用并赋值给形参变量dog。


那它和传统的按引用传递有何不同?来看看引用传递示意图:

总结

Python是按赋值传递(对象引用传递),在函数内部对形参变量所指向的对象进行修改时,如果对象是可变的,那么会直接修改对象;否则,Python会创建对象副本并修改,然后让变量指向新创建的对象副本。


注:原创文章,请勿搬运。文章来源自己的学习理解,如有错误,请批评指正。

#Python##编程##Java#

最近发表
标签列表