深入理解python中函数传递参数是值传递还是引用传递

深入理解Python中函数传递参数是值传递还是引用传递是一个常见的问题。在Python中,可以说参数传递并非严格意义上的值传递或引用传递,而是一种比较特殊的“对象引用传递”。

Python中的参数传递

Python中的“对象引用传递”是指:在函数调用时,参数传递进去的是引用,而不是变量的值。当变量是不可变对象(如number、string、tuple)时,因为无法修改其值,所以本质上相当于值传递;而当变量是可变对象(如list、set、dictionary)时,因为可以修改其值,所以本质上相当于引用传递。下面通过两个示例来具体说明:

示例一:不可变对象(值传递)

def func1(a):
    print('函数内开始:', a, id(a))
    a += 5
    print('函数内结束:', a, id(a))

b = 10
print('函数调用前:', b, id(b))
func1(b)
print('函数调用后:', b, id(b))

在这个示例中,我们将一个数字10传递给了函数func1。当函数中尝试修改a的值时,我们可以发现:函数内部的a和函数外部的b指向的id是不同的。即使在函数内部将a重新赋予了一个新值,函数外部的b的值也不会跟着变化。因此我们可以认为,当传入函数的参数是不可变对象时,Python传递的是值(通过引用来传递)。

示例二:可变对象(引用传递)

def func2(a):
    print('函数内开始:', a, id(a))
    a[0] = 5
    print('函数内结束:', a, id(a))

b = [1, 2, 3]
print('函数调用前:', b, id(b))
func2(b)
print('函数调用后:', b, id(b))

在这个示例中,我们将一个列表[1, 2, 3]传递给了函数func2。当函数中修改列表中的元素时,我们可以发现:函数内部的a和函数外部的b指向的id是一致的,即它们指向同一块内存空间。因此,当传入函数的参数是可变对象时,Python传递的是引用(通过引用来传递)。

总结

在Python中,对于不可变对象而言,传递的是值(通过引用传递),而对于可变对象而言,传递的是引用(通过引用传递)。但尽管如此,我们仍然可以对不可变对象进行修改,例如利用a += 5来修改数值类型的对象a。这实质上是将a重新赋值给了一个新的值,因此并未修改原有对象的值。因此,我们应该视情况而定,理解Python的“对象引用传递”机制,在编写代码时选择正确的传参方式。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:深入理解python中函数传递参数是值传递还是引用传递 - Python技术站

(0)
上一篇 2023年6月5日
下一篇 2023年6月5日

相关文章

  • Python3访问并下载网页内容的方法

    针对“Ilona-Blog”网站,演示如何用Python3访问并下载网页内容的方法: 获取网页内容 我们可以使用Python中的requests库来访问获取网页内容,我们需要做的是: 安装requests:如果你尚未安装它,运行!pip install requests即可安装。 获取网页内容:我们可以使用requests库中的get()函数获取网页内容,其…

    python 2023年6月3日
    00
  • python图形界面教程Tkinter详解

    Python图形界面教程Tkinter详解 什么是Tkinter Tkinter是Python的标准GUI库之一,提供给用户多种GUI组件,如文本框、按钮、滑块等,可以实现各种用户交互界面。基于Tkinter可以实现多种GUI程序,如文本编辑器、图形模拟等。 安装Tkinter 在Python 3.x中,Tkinter已经默认安装了。如果需要使用Tkinte…

    python 2023年6月13日
    00
  • Pytorch框架之one_hot编码函数解读

    Pytorch框架之one_hot编码函数解读 一、什么是one_hot编码? 在机器学习中,one_hot编码是将一个分类变量转换成一系列二进制变量的过程,其中只有一个变量包含 1,其他变量都是 0。例如:有一个分类变量”颜色”,它有三个类别:”红色”、”黄色”、”绿色”,那么对 “颜色” 进行 one_hot 编码会得到如下的结果: 红色 -> […

    python 2023年5月20日
    00
  • python代码实现学生信息管理系统

    关于Python代码实现学生信息管理系统,我们可以分为以下几个步骤: 1. 确定需求 首先需要明确的是,学生信息管理系统需要支持哪些功能,例如: 添加学生信息 查询学生信息 修改学生信息 删除学生信息 该系统还需要支持哪些操作,例如: 学生信息存储方式 数据持久化方式 界面交互方式等 2. 设计数据结构 在确定了学生信息管理系统需要支持哪些功能后,我们需要根…

    python 2023年5月19日
    00
  • python Selenium实现付费音乐批量下载的实现方法

    Python Selenium实现付费音乐批量下载的实现方法 简介 付费音乐下载受到版权保护,通常需要用户登录并支付费用后才能进行下载。本文将介绍如何使用Python Selenium库实现批量下载付费音乐。 步骤 1. 安装Selenium库 首先需要下载并安装Selenium库。在命令行中输入以下命令即可: pip install selenium 2.…

    python 2023年6月3日
    00
  • Python数据结构之树的全面解读

    Python数据结构之树的全面解读 什么是树? 树是一种重要的数据结构,它以分层的方式存储数据,根据结点之间的层次关系,被称作父结点、子结点以及兄弟结点。 树的组成部分 一棵树由一个根结点、若干个子树以及它们构成的森林组成。树具有以下属性:- 每个结点都有唯一的一个父结点(除了根结点)- 每个结点可以有多个子结点- 没有环路(即,一个结点不能成为它自己的祖先…

    python 2023年5月14日
    00
  • Win7下搭建python开发环境图文教程(安装Python、pip、解释器)

    下面是“Win7下搭建python开发环境图文教程”的详细攻略: 安装Python和pip 下载Python安装包:进入Python官网,在下载页面中选择“Python 3.8.2”版本的Windows安装包(MSI文件),下载完成后双击打开安装包。 安装Python:在安装程序中选择“Add Python 3.8 to PATH”选项,这样在以后使用Pyt…

    python 2023年5月14日
    00
  • Python 中的参数传递、返回值、浅拷贝、深拷贝

    参数传递 Python中的参数传递可以分为可变对象和不可变对象两种情况。 对于不可变对象,例如数字、字符串、元组等等,传递参数时会创建其副本,以避免函数内部对参数的修改影响到函数外的变量。 对于可变对象,例如列表、字典等等,传递参数时会将引用传递给函数,函数内部对参数的修改同样会影响到函数外的变量。 下面是一些示例说明: 示例1 – 不可变对象 def ch…

    python 2023年5月13日
    00
合作推广
合作推广
分享本页
返回顶部