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日

相关文章

  • python队列Queue的详解

    Python队列(Queue)的详解 什么是队列? 队列是一种数据结构,特点是“先进先出”(First-In-First-Out, FIFO)。在队列中,新的元素被插入到队列的末尾,而队列中最先加入的元素则在队列的开头。想象一下在餐厅排队打饭,先来的先进去,后到的要等前面的人打完饭才能自己打。 Python中的队列 Python标准库提供了许多队列的实现,比…

    python 2023年5月19日
    00
  • Python遍历zip文件输出名称时出现乱码问题的解决方法

    Python遍历zip文件输出名称时出现乱码问题的解决方法 在Python中,我们可以使用ZIpFile库对zip文件进行读取和操作。然而在中文环境下,有时候在遍历zip文件获取文件名称时会出现乱码问题。本文将讲解如何解决该问题。 1. 问题分析 我们首先看一下出现乱码的现象,假设我们有一个名为中文.zip的zip文件,其中包含了一个名为中文.txt的文本文…

    python 2023年5月20日
    00
  • python爬虫爬取网页数据并解析数据

    下面是“python爬虫爬取网页数据并解析数据”的完整攻略: 1. 爬虫基础知识 在进行Python爬虫之前,我们需要了解一些基础知识,例如: HTTP协议 抓包工具 HTML、CSS、JavaScript 正则表达式 lxml、Beautiful Soup等解析库 2. 分析目标网站 在进行爬取之前,我们需要分析目标网站的结构,找到需要爬取的具体数据。 我…

    python 2023年5月14日
    00
  • Python实现从概率分布中随机采样

    接下来我将会详细讲解“Python实现从概率分布中随机采样”的攻略。 1. 什么是概率分布 在详细介绍Python实现从概率分布中随机采样之前,首先需要知道什么是概率分布。 概率分布是指随机变量所有可能取值与相应概率的对应关系。 在Python中,我们可以通过Scipy库中的stats模块来实现概率分布的计算和操作。 2. 从概率分布中随机采样的方法 随机采…

    python 2023年6月3日
    00
  • python卸载后再次安装遇到的问题解决

    Python卸载后再次安装遇到的问题解决 背景 在使用Python进行开发时,我们可能会遇到需要卸载已安装的Python版本,然后重新安装Python的情况。但是,重新安装Python时可能会遇到一些问题,这篇攻略就是为了帮助读者解决这些问题。 问题一:重新安装Python后仍然显示旧版本 有时候我们卸载旧版本的Python,但是在重新安装新版本的Pytho…

    python 2023年5月14日
    00
  • python使用pyshp读写shp文件的实现

    让我们来详细讲解一下“python使用pyshp读写shp文件的实现”的完整攻略。 一、前置知识 在讲解具体的使用方法之前,我们需要先了解一些基础知识。 1.1 什么是shp文件 shp文件(Shapefile)是一种矢量数据格式,用于存储地理空间信息,包括点、线、面等几何要素和属性信息等。shp文件通常是由一系列文件组成,包括.shp、.shx、.dbf、…

    python 2023年5月14日
    00
  • python制作机器人的实现方法

    Python是一种功能强大的编程语言,可以用于制作机器人。本文将详细讲解如何使用Python制作机器人,包括两种实现方法:使用第三方库、使用自然语言处理。 使用第三方库 要使用第三方库制作机器人,我们可以使用Python中的chatterbot库。以下是一个示例,演示如何使用chatterbot库制作机器人: from chatterbot import C…

    python 2023年5月15日
    00
  • shell自动安装python3的脚本写法

    下面是“shell自动安装python3的脚本写法”攻略。 前置条件 在安装 Python3 之前,您的系统应该已经安装了一些编译器和依赖项。以下命令,可以在 Ubuntu 系统中安装这些依赖项: sudo apt-get update sudo apt-get install build-essential checkinstall sudo apt-ge…

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