Python基础之值传递和引用传递详解

Python基础之值传递和引用传递详解

一、概述

在Python中,函数传参的方式有两种:值传递和引用传递。对于初学者而言,这一概念非常重要。

二、值传递(传递不可变类型)

值传递是指在函数调用时,将实际参数的值复制一份放到函数栈内存中,以供函数使用。因此在函数内部对这个参数进行修改,不会对原来的变量造成影响。

例如:

def change(a):
    a = 10

b = 5
change(b)

print(b)  # 输出结果为 5

在这个例子中,变量 b 的值为 5。然后我们将变量 b 作为参数调用了 change() 函数,函数内部对参数 a 进行修改,将其值改为 10。但是输出结果依然为 5,这表明传递的是变量值(也称为传递不可变类型)。

三、引用传递(传递可变类型)

引用传递是指在函数调用时,将实际参数的地址传递到函数中,那么在函数内部对这个地址所指的内容进行修改,也就是直接修改的是实际参数本身的值。

例如:

def change(a):
    a.append(10)

b = [1, 2, 3]
change(b)

print(b)  # 输出结果为 [1, 2, 3, 10]

在这个例子中,变量 b 的值为 [1, 2, 3]。然后我们将变量 b 作为参数调用了 change() 函数,函数内部对参数 a 所代表的列表进行修改,向其中添加了值为 10 的元素。因此输出结果为 [1, 2, 3, 10]

在Python中,可变类型和不可变类型有哪些呢?哪些属于可变,哪些属于不可变呢?

可变类型:

  • 列表(list)
  • 字典(dict
  • 集合(set)

不可变类型:

  • 数字(int、float、bool、complex)
  • 字符串(str)
  • 元组(tuple)

四、示例说明

下面我们再来结合一个例子,更好地理解值传递和引用传递之间的差别。

def change(a):
    a = a + 1

b = 5
change(b)

print(b)  # 输出结果为 5

在这个例子中,和之前的例子一样,我们定义了一个 change() 函数,并且将变量 b 作为函数的参数传入。然而,这次我们传递的是一个整型变量,而不是一个列表变量。

我们期望的结果是将变量 b 的值加 1,并将结果输出。但是,实际输出结果依然为 5。这是为什么?

对于这个问题,可以这么解释:在函数调用时,变量 b 的值会被复制一份到函数定义的参数 a 中。此时,ab 指向的是同一个位置。然后在函数中对 a 进行加法操作,得到了 6 这个新的值。但是由于这个操作并没有修改原来的变量 b,所以输出结果依然是 5

五、总结

在Python中,函数传参的方式有两种:值传递和引用传递。值传递是传递不可变类型的变量,引用传递是传递可变类型的变量。使用不同的参数传递方式,我们在函数内部对参数进行修改时会得到不同的结果。因此,在实际编程中,我们需要根据参数类型以及需求来选择不同的参数传递方式。

以上就是 Python 基础之值传递和引用传递详解的攻略。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python基础之值传递和引用传递详解 - Python技术站

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

相关文章

  • BeautifulSoup获取指定class样式的div的实现

    在BeautifulSoup中,可以使用CSS选择器语法获取指定class样式的div。本文将详细讲解如何使用BeautifulSoup获取指定class样式的div,包括两个示例。 示例一:获取单个class样式的div 以下是一个示例代码,演示如何使用BeautifulSoup获取单个class样式的div: from bs4 import Beauti…

    python 2023年5月15日
    00
  • 基于Python的微信机器人开发 微信登录和获取好友列表实现解析

    下面是基于Python的微信机器人开发攻略: 一、微信登录 1. 安装itchat 首先,我们需要安装itchat,一个基于Python的微信个人号接口,可以帮助我们实现微信登录和进行相关操作。命令行中输入以下命令即可: pip install itchat 2. 登录微信 接下来,我们要编写微信登录的代码。将以下代码保存为wechat_login.py文件…

    python 2023年5月23日
    00
  • python实习总结(yeild,async,azwait和协程)

    Python实习总结 本文将介绍在Python实习中所了解到的yield、async、await和协程的知识点以及如何使用它们。 yield和生成器 yield是一种特殊的关键字,它可以让函数暂停执行,并将函数的当前状态保持下来。yield常用于生成器中,生成器可以用来迭代一组数据,而不用事先生成整组数据,这样可以节省内存空间。以下是yield的示例代码: …

    python 2023年5月13日
    00
  • python3+PyQt5+Qt Designer实现界面可视化

    下面是Python3+PyQt5+Qt Designer实现界面可视化的完整攻略: 1. 安装PyQt5和Qt Designer 在开始之前,需要先安装PyQt5和Qt Designer。如果你使用的是pip,可以直接在终端中运行下面的命令进行安装: pip3 install PyQt5 pyqt5-tools 如果你使用的是Anaconda,可以在Anac…

    python 2023年6月13日
    00
  • Django 允许局域网中的机器访问你的主机操作

    要让局域网中的机器能够访问你的Django主机操作,可以按照以下步骤进行。 步骤一:设置Django的IP和端口号 在你的Django项目的根目录下的manage.py所在的路径下,打开命令行或终端。 输入以下命令,将Django的运行IP地址设置为本地局域网地址:python manage.py runserver 0.0.0.0:8000 其中,0.0.…

    python 2023年5月23日
    00
  • 微信公众号接入ChatGPT机器人的方法

    接入ChatGPT机器人的方法需要经过以下步骤: 1. 注册微信公众号 如果你还没有自己的微信公众号,可以先去微信公众平台官网注册一个。注册成功后,在基本配置里面获取到你的AppID和AppSecret。 2. 获取ChatGPT API Key 前往AI开放平台官网注册一个账号并登录,然后在“自然语言处理”分类下点击“ChatGPT一键接入”。在这里你可以…

    python 2023年5月23日
    00
  • Python调用钉钉自定义机器人的实现

    下面我就为大家详细讲解如何使用Python调用钉钉自定义机器人,并提供两条示例说明。 1. 准备工作 钉钉账号,拥有创建自定义机器人的权限; Python的requests库,可使用pip进行安装; 2. 获取自定义机器人Webhook地址 在钉钉中创建一个自定义机器人,然后获取其Webhook地址。 具体步骤: 进入钉钉工作台,点击自定义机器人,进入自定义…

    python 2023年5月23日
    00
  • Python 如何展开嵌套的序列

    展开嵌套的序列就是将一个多层嵌套的序列转化为一个简单的序列。在 Python 中,要展开嵌套序列,可以使用递归函数和迭代器来实现。 递归函数 递归函数是指在函数内部直接或间接调用函数本身的函数。通过递归函数实现展开嵌套的序列,可以使用以下步骤: 创建一个函数,传入一个序列作为参数。 python def flatten(sequence): pass 在函数…

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