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

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

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

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

def change_list(lst):
    lst.append(1)

def change_int(i):
    i += 1

lst = [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.mfbz.cn/a/296139.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

LINUX服务器防火墙nf_conntrack问题一例

一、故障现象 业务反馈服务异常,无法响应请求,从系统日志 dmesg 或 /var/log/messages 看到大量以下记录:kernel: nf_conntrack: table full, dropping packet. 二、问题分析 业务高峰期服务器访问量大,内核 netfilter 模块 conntrack 相关参…

听GPT 讲Rust源代码--compiler(19)

File: rust/compiler/rustc_target/src/spec/mips_unknown_linux_gnu.rs 该文件(rust/compiler/rustc_target/src/spec/mips_unknown_linux_gnu.rs)是Rust编译器针对MIPS架构上的Linux系统的目标描述文件。它的作用是定义了在这个目标上编译时的一些配置…

mysql之数据类型、建表以及约束

目录 一. CRUD 1.1 什么是crud 1.2 select(查询) 1.3 INSERT(新增) 1.4 UPDATE(修改) 1.5 DELETE(删除) 二. 函数 2.1 常见函数 2.2 流程控制函数 2.3聚合函数 三. union与union all 3.1 union 3.2 union all 3.3 具体不同 3.4 结论 四、思维导图 一. CRUD 1.1…

建站指南,如何将拥有的域名自定义链接到wordpress

关于Dynadot Dynadot是通过ICANN认证的域名注册商,自2002年成立以来,服务于全球108个国家和地区的客户,为数以万计的客户提供简洁,优惠,安全的域名注册以及管理服务。 在Dynadot上,我们可已经账户中管理的…

OpenHarmony之消息机制实现

OpenHarmony之消息机制实现 背景 在之前的介绍(OpenHarmony之HDF驱动框架)中,了解到OpenHarmony的消息机制主要有以下两种: 用户态应用发送消息到驱动。用户态应用接收驱动主动上报事件。 下面我们分别来看看两种机制用户态的…

使用 dbgate 在 sealos 上完美管理 mysql pgsql 等数据库

先登录 sealos 创建数据库,可以创建个 pgsql: 再到模版市场启动 dbgate: 配置数据库的连接信息,即可搞定收工 sealos 以kubernetes为内核的云操作系统发行版,让云原生简单普及 laf 写代码像写博客一样简单,什么docker kubernete…

Linux系统使用超详细(七)~定时任务:crontab

目录 一、定时任务简介 1.1cron工具概述 1.2crontab命令简述 二、crontab安装与检查 2.1安装步骤 2.2查看crontab的状态 2.3查看crontab服务 三、crontab命令 3.1常用命令 3.2定时任务的写法 3.3实例 四、添加定时任务 4.1使用crontab -e命令 4.2创建一个独立的定…

银河麒麟Kylin-Server-V10-SP3使用ISO镜像搭建本地内网YUM/DNF源cdrom/http

机房服务器安装一般是内网环境,需要配置本地的YUM/DNF源。本文介绍通过ISO镜像搭建内网环境的UM/DNF源 准备工作: 提前准备好Kylin-Server-V10-SP3的ISO镜像文件。 本机IP地址:192.168.40.201 镜像存放目录/data/iso/Kylin-Server-V10-SP3-Ge…

编写一个弹跳小球的程序,小球在窗口中四处反弹(python)

import pygame import random# 初始化Pygame pygame.init()# 窗口尺寸 width 800 height 600# 创建窗口 screen pygame.display.set_mode((width, height)) pygame.display.set_caption("Bouncing Ball")# 小球初始位置和速度 ball_radius 20 ball_color (255, …

前端页面的生命周期

性能问题呈现给用户的感受往往就是简单而直接的:加载资源缓慢、运行过程卡顿或响应交互延迟等。而在前端工程师的眼中,从域名解析、TCP建立连接到HTTP的请求与响应,以及从资源请求、文件解析到关键渲染路径等,每一个环节都有可能因…

iOS苹果和Android安卓测试APP应用程序的区别差异

在移动应用开发中,测试是一个至关重要的环节。无论是iOS苹果还是Android安卓,测试APP应用程序都需要注意一些差异和细节。本文将详细介绍iOS和Android的测试差异,包括操作系统版本、设备适配、测试工具和测试策略,并回答一些新手容…

web3d-three.js场景设计器-TransformControls模型控制器

场景设计器-TransformControls 控制器 该控制器可以指定模型进入可控制模式-如图有三种控制方式 translate --移动模式 rotate -- 旋转模式 scale -- 缩放模式 方便布局过程中快捷对模型进行摆放操作。 引入方式 import { TransformControls } from three/examples/jsm/…

深入Pandas(二):高级数据处理技巧

文章目录 系列文章目录引言时间序列分析可视化示例 高级数据分析技术分组与聚合操作时间序列分析 高级数据操作数据合并与重塑示例:数据合并merge示例:数据合并concat示例:数据重塑 - 透视表 高级索引技巧 结论 系列文章目录 Python数据分析…

C++《异常》

前言:C有一套独立的异常处理机制,今天就来做详细的介绍try,catch这两个词等 在C语言中处理错误的方式和缺陷有: 返回错误码。 缺陷: 1.错误码不好设置,比如:除0操作,就不好返回错误码。如果返回一个数字&…

uniapp微信小程序投票系统实战 (SpringBoot2+vue3.2+element plus ) -小程序微信用户登录实现

锋哥原创的uniapp微信小程序投票系统实战: uniapp微信小程序投票系统实战课程 (SpringBoot2vue3.2element plus ) ( 火爆连载更新中... )_哔哩哔哩_bilibiliuniapp微信小程序投票系统实战课程 (SpringBoot2vue3.2element plus ) ( 火爆连载更新中... )共计21条视频…

LabVIEW在高级结构监测中的创新应用

LabVIEW在高级结构监测中的创新应用 LabVIEW作为一个强大的系统设计平台,其在基于BOTDA(光时域反射分析)技术的结构监测中发挥着核心作用。利用LabVIEW的高效数据处理能力和友好的用户界面,开发了一个先进的监测系统。该系统专门…

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

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

箭头函数 - JavaScript的新宠儿

📢 鸿蒙专栏:想学鸿蒙的,冲 📢 C语言专栏:想学C语言的,冲 📢 VUE专栏:想学VUE的,冲这里 📢 CSS专栏:想学CSS的,冲这里 &#x1f4…

C语言编译器(C语言编程软件)完全攻略(第二十七部分:VS安全函数问题(C语言安全函数)是怎么回事?如何解决?)

介绍常用C语言编译器的安装、配置和使用。 二十七、VS安全函数问题(C语言安全函数)是怎么回事?如何解决? 在 VS(Visual Studio)下编译C语言程序,如果使用了 scanf()、gets()、strcpy()、strca…

听GPT 讲Rust源代码--compiler(17)

File: rust/compiler/rustc_passes/src/debugger_visualizer.rs 文件rust/compiler/rustc_passes/src/debugger_visualizer.rs是Rust编译器中的一个代码文件,它包含了与调试器可视化相关的功能。 调试器可视化是一个在调试过程中有助于理解和分析代码执行的工具。它…
最新文章