[算法与数据结构][python]:Python参数传递,“值传递”还是“引用传递“?

Python中的函数参数传递方式是“传对象引用”,可以理解为“值传递”和“引用传递”的混合体。

在Python中,所有的数据类型都是对象。如果函数参数是不可变对象(如整数、字符串、元组),那么传递的就是对象的值,即“值传递”。因为不可变对象一旦创建,对象内的内容是不可改变的,所以在函数内部的参数值改变,并不会影响到原来的对象。

如果函数参数是可变对象(如列表、字典、自定义的类实例等),那么传递的就是对象的引用,即“引用传递”。函数内部对参数进行的操作,如添加、删除或其他修改,都会影响到原来的对象。

def change_list(lst):lst.append(1)def change_int(i):i += 1lst = [0]
i = 0
change_list(lst)
change_int(i)
print(lst)  # 输出:[0, 1]
print(i)  # 输出:0

Python中的可变对象与不可变对象:

  1. 不可变对象:整型(int)、浮点型(float)、布尔型(bool)、字符串(str)、元组(tuple)、冻结集合(frozenset)

    不可变对象一旦创建,其状态就不能改变。也就是说,你不能在不可变对象上执行添加、删除、修改等操作。不可变对象的这种特性,使得我们可以安全地进行hash操作,将不可变对象用作字典的键或者添加到集合中。线程安全,不可变对象在多线程环境中也更为安全,因为它们的状态不会被其他线程改变。

  2. 可变对象:列表(list)、集合(set)、字典(dict)、bytearray、自定义的类(如果类的属性可以修改)

    可变对象在创建后,其状态可以改变。也就是说,你可以在可变对象上执行添加、删除、修改等操作。可变对象的这种特性,使得我们可以灵活地对对象进行操作,并且不需要每次操作都创建一个新的对象。在多线程编程时,通常需要使用锁或者其他同步机制来保护可变对象的状态。

"值传递"和"引用传递"是两种函数参数传递的方式。

  1. 值传递(Value Passing): 当函数调用时,实参把它的值传递给形参。在这种情况下,改变形参的值并不会影响到实参。值传递可以看作是原始数据的一个副本,函数内对参数的修改不会影响到原始数据。

​ 例如,C和C++中的基本数据类型(int,char等)和自定义的类对象,都是通过值传递的方式传递给函数。

  1. 引用传递(Reference Passing): 与值传递不同,引用传递是将实参的地址传递给形参。在这种情况下,对形参的任何操作都会影响到实参的值。引用传递可以看作是原始数据的一个别名或引用,函数内对参数的修改会直接影响到原始数据。

​ 例如,Java中对象的传递就是引用传递,Python中的列表和字典等可变对象也是通过引用传递的方式传递给函数。

​ 总结来说,值传递是传递对象的副本,修改不会影响原始对象;引用传递是传递对象的地址,修改会影响原始对象。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/598091.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

695岛屿最大面积

题目 给定一个 row x col 的二维网格地图 grid ,其中:grid[i][j] 1 表示陆地, grid[i][j] 0 表示水域。 网格中的格子 水平和垂直 方向相连(对角线方向不相连)。整个网格被水完全包围,但其中恰好有一个…

逻辑回归简单案例分析--鸢尾花数据集

文章目录 1. IRIS数据集介绍2. 具体步骤2.1 手动将数据转化为numpy矩阵2.1.1 从csv文件数据构建Numpy数据2.1.2 模型的搭建与训练2.1.3 分类器评估2.1.4 分类器的分类报告总结2.1.5 用交叉验证(Cross Validation)来验证分类器性能2.1.6 完整代码&#xf…

malloc calloc 与 realloc

malloc 原型 void *malloc(size_t size);size字节为单位,保持原数据,不做初始化。 calloc 原型 void *calloc(size_t n, size_t size);分配n*size 字节数 初始化为零。 realloc 原型 void *realloc (void *ptr, size_t size)扩容,重新分配…

JavaWeb 里的Vue,Springboot,Mvc,Servlet,JSP,SSM都是什么?

在Java Web开发中,使用一系列技术和框架可以构建强大、高效的Web应用程序。在这个领域,一些关键的技术包括Vue.js、Spring Boot、MVC、Servlet、JSP以及SSM(Spring Spring MVC MyBatis)。本文将对这些技术进行详细解释&#xff…

copilot插件全解

COPILOT是一个基于AI的编程辅助工具,它可以帮助程序员自动编写代码,提高开发效率。COPILOT的插件主要是为了将其功能集成到不同的编程环境中,方便程序员使用。 目前,COPILOT支持多种编程环境,包括Visual Studio Code、…

钉钉审批流程解读

组织机构 部门 部门可以创建下级部门部门可以设置部门主管,可以是多人部门可以默认构建,沟通群可以设置部门信息,比如电话、简介可以设置部门的可见性,比如隐藏本部门,本部门将不会在组织机构、搜索,个人…

怎么让视频进行加速处理并保存

要加速处理视频并保存,可以使用专业的视频编辑软件或者一些在线工具。以下是一种常见的方法,使用FFmpeg这个开源工具。请确保你已经安装了FFmpeg。 打开命令行界面: 打开终端或命令提示符窗口。 使用以下命令进行视频加速处理: f…

如何从格式化的 Windows 和 Mac 电脑硬盘恢复文件

格式化硬盘可为您提供全新的体验。它可以是硬盘驱动器定期维护的一部分,是清除不再使用的文件的一种方法,在某些情况下,它是处理逻辑损坏的万福玛利亚。但是,许多用户发现自己格式化了错误的分区或驱动器,或者后来意识…

c语言-指针进阶

文章目录 前言一、字符指针二、数组指针2.1 数组指针基础2.2 数组指针作函数参数 总结 前言 在c语言基础已经介绍过关于指针的概念和基本使用,本篇文章进一步介绍c语言中关于指针的应用。 一、字符指针 字符指针是指向字符的指针。 结果分析: "ab…

Java中常见的设计模式及其实际应用

在软件开发中,设计模式是重要的指导原则,它们提供了解决特定问题的可重用方案。Java作为一种强大的编程语言,广泛应用了许多设计模式。让我们深入探讨几种常见的设计模式,并展示它们在实际Java应用中的用例。 1. 单例模式 (Singl…

elementui loading自定义图标和字体样式

需求:页面是用了很多个loading,需要其中有一个字体大些(具体到图标也一样的方法,换下类名就行) 遇见的问题:改不好的话会影响其他的loading样式(一起改变了) 效果展示 改之前 改之…

使用conda管理Python虚拟环境

标题:使用conda管理Python虚拟环境 摘要:本文将介绍如何使用conda工具创建、查看和删除Python虚拟环境。通过使用conda,我们可以轻松地在不同的项目中使用不同的Python版本和依赖库,避免不同项目之间的冲突。 一、简介 Python是…

使用 Kafka 和 CDC 将数据从 MongoDB Atlas 流式传输到 SingleStore Kai

SingleStore 提供了变更数据捕获 (CDC) 解决方案,可将数据从 MongoDB 流式传输到 SingleStore Kai。在本文中,我们将了解如何将 Apache Kafka 代理连接到 MongoDB Atlas,然后使用 CDC 解决方案将数据从 MongoDB Atlas 流式传输到 SingleStore…

IDEA好用插件

CodeGlance Pro 右侧代码小地图 Git Commit Template git提交信息模板 IDE Eval Reset 无限试用IDEA Maven Helper 图形化展示Maven项 One Dark theme 好看的主题 SequenceDiagram 展示方法调用链 Squaretest 生成单元测试 Translation 翻译 Lombok lombok插件…

【开题报告】基于JavaWeb的年货销售系统的设计与实现

1.选题背景 年货销售是中国传统文化的一部分,也是中国人过年必备的习俗之一。随着互联网的发展,越来越多的人选择在网上购买年货,以节省时间和精力。为了满足人们对年货的购买需求,设计一个基于JavaWeb的年货销售系统具有重要意义…

leecode | 829连续整数求和

给一个整数n 求连续整数的和等于n 的个数 这道题 是一个数论的思想 解决思路: 数必须是连续的,可以转化成一个通用的公式,以101为例做一般性推导,: 101 = 101 = 50 + 51 &#xff1d…

AQS原来是这么设计的,泰裤辣!

缘起 每门编程语言基本都离不开并发问题,Java亦如此。谈到Java的并发就离不开Doug lea老爷子贡献的juc包,而AQS又是juc里面的佼佼者 因此今天就一起来聊聊AQS 概念 AQS是什么,这里借用官方的话 Provides a framework for implementing blo…

web3: 智能合约

目录 智能合约的历史什么是智能合约如何运作?智能合约的应用代币标准ERC-20什么是 ERC-20?功能ERC-20 代币接口ERC-721什么是 ERC-721?功能ERC-721 代币接口:ERC-165ERC-777什么是 ERC-777&

第11课 实现桌面与摄像头叠加

在上一节,我们实现了桌面捕获功能,并成功把桌面图像和麦克风声音发送给对方。在实际应用中,有时候会需要把桌面与摄像头图像叠加在一起发送,这节课我们就来看下如何实现这一功能。 1.备份与修改 备份demo10并修改demo10为demo11…

前端跨域问题的解决思路

目录 前言 跨域问题的解决思路 一般跨域的解决方案 前言 做了一个简单页面,做了一些数据埋点,想通过企业微信机器人来推送数据,遇到了一些问题,顺便记录下。 跨域问题的解决思路 由于是项目比较简单,直接使用了aj…