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

yizhihongxing

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日

相关文章

  • 详解Python3网络爬虫(二):利用urllib.urlopen向有道翻译发送数据获得翻译结果

    详解Python3网络爬虫(二):利用urllib.urlopen向有道翻译发送数据获得翻译结果 本文将介绍如何使用Python3的urllib库向有道翻译发送数据,并获得翻译结果。我们将使用urllib库中的urlopen()函数来完成这个过程。 发送数据并获得翻译结果 首先,我们需要使用urlopen()函数向有道翻译发送数据,并获得翻译结果。以下是Py…

    python 2023年5月15日
    00
  • 解决python爬虫中有中文的url问题

    当在Python爬虫中遇到中文URL时,需要将这些URL进行编码后才能正常使用。下面是解决Python爬虫中有中文的URL问题的完整攻略: 1. 使用urllib.parse.quote()进行URL编码 使用urllib.parse.quote()方法可以将中文字符转换为对应的URL编码形式。该方法接收一个字符串作为参数,返回URL编码后的字符串。 下面是…

    python 2023年5月31日
    00
  • Python网页正文转换语音文件的操作方法

    下面给您详细讲解“Python网页正文转换语音文件的操作方法”的完整攻略。 总体思路 Python通过网络抓取网页正文,然后使用文本转语音工具将正文转换成语音文件。 具体步骤 安装所需要的第三方库 首先需要安装两个第三方库:bs4和pyttsx3。 pip install bs4 pyttsx3 bs4是Python库中的一个解析器,可以用来处理HTML和X…

    python 2023年5月19日
    00
  • Python通用验证码识别OCR库之ddddocr验证码识别

    Python通用验证码识别OCR库之ddddocr验证码识别 介绍 ddddocr是一款使用Python语言编写的开源通用验证码识别OCR库,可以识别多种类型的验证码,如数字、字母、符号等。它采用了深度学习技术,具有高准确率、高鲁棒性、高泛化能力等优点,是一款非常实用的OCR库。 安装 安装ddddocr库需要使用pip命令,只需在命令行中输入以下命令即可:…

    python 2023年5月19日
    00
  • 详解Python PIL putdata()方法

    Python PIL库是Python中处理图像的重要库,其中putdata()方法是该库中用于像素级别修改图像的重要方法之一,下面是putdata()方法的详细攻略。 什么是putdata()方法 putdata()方法是Python PIL库中的一个方法,用于像素级别在图像上批量写入数据,它可以接收一个1维列表,将其中的值按照图像的行列顺序一一对应地写入到…

    python-answer 2023年3月25日
    00
  • Python tkinter label 更新方法

    Python tkinter是一个常用的GUI工具包,其Label控件可以用来显示文本和图片等,当我们需要动态地修改Label的内容时,我们需要使用到Label的更新方法。下面是Python tkinter label 更新方法的完整攻略。 标题一 1.使用字符串变量绑定Label控件的text参数 Python tkinter中的Label控件具备一个te…

    python 2023年6月13日
    00
  • python从list列表中选出一个数和其对应的坐标方法

    以下是详细讲解“Python从List列表中选出一个数和其对应的坐标方法”的完整攻略。 在Python中,可以使用enumerate()函数来获取List中元素的索引和值。本文将介绍如何使用enumerate()函数来选出List中的一个数和其对应坐标,并提供两个示例。 选出一个数和其对应的坐标 可以使用enumerate()函数来获取List中元素的索和值…

    python 2023年5月13日
    00
  • python数组中的 k-diff 数对例题解析

    Python数组中的k-diff数对例题解析 在Python中,经常会遇到需要查找数组中满足某些条件的数对的问题。这类问题可以通过使用哈希表来解决,其中k-diff数对是其中一种常见问题。本文将详细讲解如何使用哈希表解决这类问题。 什么是k-diff数对? k-diff数对指的是:在给定的数组中,两个不同的数的绝对差等于k。绝对差是指两数之差的绝对值,并且这…

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