Python(八十九)函数的参数的内存分析

news2024/9/23 7:18:51

❤️ 专栏简介:本专栏记录了我个人从零开始学习Python编程的过程。在这个专栏中,我将分享我在学习Python的过程中的学习笔记、学习路线以及各个知识点。
☀️ 专栏适用人群 :本专栏适用于希望学习Python编程的初学者和有一定编程基础的人。无论你是学生、职场人士还是对编程感兴趣的爱好者,都能从中受益。跟着我的学习笔记一起学习python吧。
🌙专栏目标:本专栏的目标是帮助我自己记忆、方便回顾所学知识以及帮助其他想学习python的小伙伴掌握Python编程语言的基本概念和技巧,并逐步提高我们的编程能力。通过这个专栏,我们将学会如何编写Python代码,理解各种数据类型、控制结构和函数,掌握常用的Python模块和库,以及应用Python解决实际问题。

⭐️ 专栏主要内容: 主要学习python的开发环境搭建;Python的基础知识,包括变量、数据类型、条件语句和循环等;python的数据结构和算法;python的函数和模块;python的文件处理等。
🌴 专栏说明 :如果文章知识点有错误的地方,欢迎大家随时在文章下面评论,我会第一时间改正。让我们一起学习,一起进步。
💑专栏主页:从零开始的Python入门之路

在这里插入图片描述

文章目录

    • 引言
    • 不可变对象与可变对象
    • 不可变对象的参数传递
    • 可变对象的参数传递
    • 总结一下

引言

在Python中,函数是代码组织和重用的基本单元。在函数调用的过程中,我们经常需要传递参数给函数,但是对于不同类型的参数(可变和不可变对象),参数的传递方式会有所不同。本文将详细探讨函数参数的内存分析,特别是在函数体内对参数进行修改时的影响。

不可变对象与可变对象

在Python中,对象可以分为两种主要类型:可变对象和不可变对象。

  • 不可变对象: 一旦创建,就无法修改其内容。例如,整数、浮点数、字符串等都属于不可变对象。
  • 可变对象: 其内容可以在创建后被修改。例如,列表、字典、集合等都是可变对象。

理解参数是不可变对象还是可变对象对于理解函数中参数传递的影响至关重要。

不可变对象的参数传递

当我们传递不可变对象作为函数参数时,函数体内对参数的修改不会影响到实参的值。

def modify_immutable(value):
    print("Inside function (before modification):", value)
    value += 10
    print("Inside function (after modification):", value)

# 使用整数作为参数
num = 5
modify_immutable(num)
print("Outside function:", num)

运行结果:

Inside function (before modification): 5
Inside function (after modification): 15
Outside function: 5

解释:在这个例子中,num是一个整数,它是不可变对象。尽管在函数内部对参数进行了修改,但这并没有影响到外部的num值。

可变对象的参数传递

相反,如果我们传递可变对象作为函数参数,函数内对参数的修改将会影响到实参的值。

def modify_mutable(my_list):
    print("Inside function (before modification):", my_list)
    my_list.append(4)
    print("Inside function (after modification):", my_list)

# 使用列表作为参数
my_list = [1, 2, 3]
modify_mutable(my_list)
print("Outside function:", my_list)

运行结果:

Inside function (before modification): [1, 2, 3]
Inside function (after modification): [1, 2, 3, 4]
Outside function: [1, 2, 3, 4]

解释:在这个例子中,my_list是一个列表,它是可变对象。函数内部对列表进行了修改,导致外部的my_list也发生了变化。

总结一下

在Python中,函数参数的传递方式取决于参数是不可变对象还是可变对象。对不可变对象的修改不会影响到实参,而对可变对象的修改会影响到实参。

通过深入了解参数传递的内存机制,我们能更好地理解在函数调用过程中发生的事情。这对于编写高效、可维护的代码至关重要。

参考链接:

  • Python 官方文档 - 不可变序列
  • Python 官方文档 - 可变序列

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

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

相关文章

[学习记录]Node event loop 总结流程图

文章目录 文章来源根据内容输出的流程图待处理遗留的问题参考 文章来源 详解JavaScript中的Event Loop(事件循环)机制 根据内容输出的流程图 待处理 这里从polling阶段开始 好像有些问题 遗留的问题 为什么“在I/O事件的回调中,setImmediate…

【动态规划】求最长递增子序列问题

目录 问题描述递推关系建立递推关系的思路约束条件:以 s [ k ] s[k] s[k] 结尾约束条件:以 s [ k ] s[k] s[k] 开头约束条件:增加子问题参数(前缀)约束条件:增加子问题参数(后缀)约束条件:LIS长度为k且末尾元素最小 运行实例 问…

mysql主从复制-redis集群扩容缩容、缓存优化(缓存更新策略、穿透,击穿,雪崩)、mysql主从搭建、django实现读写分离

基于Docker实现读写分离 1 redis集群扩容缩容 1.1 集群扩容 1.2 集群缩容 2 缓存优化 2.1 缓存更新策略 2.2 穿透,击穿,雪崩 3 mysql主从搭建 4 django实现读写分离 1 redis集群扩容缩容 1.1 集群扩容 # 6台机器,3个节点集群# 8台机器&am…

Blazor Select 实现点击一次选项触发一次后台事件

Blazor的官方案例中,Select组件只有两个事件 1、OnSelectedItemChanged 每次选项的时候改变触发,如果你点击同一个选项是不会触发后台的方法的 2、OnBeforeSelectedItemChange 我们可以用这个事件实现每次点击同一个选项都可以触发后台事件 需要注意下最…

同旺科技 USB 转 RS-485 适配器 -- 隔离型

内附链接 1、USB 转 RS-485 适配器 隔离版主要特性有: ● 支持USB 2.0/3.0接口,并兼容USB 1.1接口; ● 支持USB总线供电; ● 支持Windows系统驱动,包含WIN10 / WIN11 系统32 / 64位; ● 支持Windows …

电子学会C/C++编程等级考试2022年06月(三级)真题解析

C/C++等级考试(1~8级)全部真题・点这里 第1题:制作蛋糕 小A擅长制作香蕉蛋糕和巧克力蛋糕。制作一个香蕉蛋糕需要2个单位的香蕉,250个单位的面粉,75个单位的糖,100个单位的黄油。制作一个巧克力蛋糕需要75个单位的可可粉,200个单位的面粉,150个单位的糖,150个单位的黄…

Spring Boot 3.2.0 Tomcat虚拟线程初体验 (部分装配解析)

写在前面 spring boot 3 已经提供了对虚拟线程的支持。 虚拟线程和平台线程主要区别在于,虚拟线程在运行周期内不依赖操作系统线程:它们与硬件脱钩,因此被称为 “虚拟”。这种解耦是由 JVM 提供的抽象层赋予的。 虚拟线程的运行成本远低于平…

UE 事件分发机制 day9

观察者模式原理 观察者模式通常有观察者与被观察者,当被观察者状态发生改变时,它会通知所有的被观察者对象,使他们能够及时做出响应,所以也被称作“发布-订阅模式”。总得来说就是你关注了一个主播,主播的状态改变会通…

逆向 wa 发送图片

开发工具 工具名称工具类型说明AndroidStuduo编辑工具开发工具jadxjava工具将apk解成java项目xposed插件工具插件whatsApp版本2.23.16.77 分析源码的点: 发送图片的点 获取SendMedia 回调 实现 public void sendImg(String user, String path) throws Exce…

毫米波雷达DOA角度计算-----MUSIC算法

MUSIC算法如下: txNum :发射天线 2个 ,rxNum:接收天线 4 个 。 ant : 为目标点的 天线 接收数据 , 为 8*1矩阵。 A ant;d 0.5;M 1; % # 快拍数ang_ax -90:90; % 角度坐标% 接收信号方向向量for k1:…

04 # 第一个 TypeScript 程序

初始化项目以及安装依赖 新建 ts_in_action 文件夾 npm init -y安装好 typescript,就可以执行下面命令查看帮助信息 npm i typescript -g tsc -h创建配置文件,执行下面命令就会生成一个 tsconfig.json 文件 tsc --init使用 tsc 编译一个 js 文件 新…

PVE中CT容器安装openwrt X86的极简方法

下载推荐:https://openwrt.ai/ 使用环境PVE8.0,openwrt是以上网址的最新版,内涵及其丰富组件。 问题来源: 在PVE虚拟机可以很方便的使用img文件,转换qm 成一个硬盘文件,加入到虚拟机也就完成了&#xff0c…

python基础练习题库实验6

文章目录 题目1代码实验结果题目2代码实验结果题目3代码实验结果题目4代码实验结果题目总结题目1 根据以下规范编写一个函数: 函数名称:triple输入参数:1个输入参数数据类型字符串返回值:函数返回1个字符串值。该字符串由每个字符重复3次的句子构成。例如,如果句子是Uni,…

科学与工程计算基础(数值计算)知识点总结

数值计算 第1章 概论1.2 数值计算中的误差1.2.1 误差的来源和分类1.2.2 误差与有效数字1.2.3 数值运算的误差估计 1.3 误差定性分析和避免误差危害1.3.1 算法的数值稳定性1.3.3 避免误差危害 1.4 数值计算中算法设计的技术1.5 习题1.5.1 判断题1.5.2 计算题 第2章 插值法2.2 拉…

i已学赋能智慧教育时代的幼儿教育

伴随“教育数字化战略行动”的深入开展,智慧教育正式成为国家战略。智慧教育延伸至家校社教育的每个阶段。当前,为适应智慧教育发展趋势,我国制定了《中国教育现代化2035》《教育部关于加强“三个课堂”应用的指导意见》《教育信息化2.0行动计划》等文件。幼儿作为智慧教育、智…

计算机网络408

一:计算机网络体系结构 1.计网的概念,组成,功能和分类 一:计算机网络的发展 (3)从功能组成视觉看:分为资源子网和通信子网 2.计网性能指标

“PredictingChildrenHeight“ app Tech Support(URL)

Using our app, we can predict a childs height through formulas. Because there are many factors that affect a childs height, it is for reference only. ​​​​​​​ If you have any questions, you can either leave a message or send the questions to our em…

Unity-链接MySql5.7

链接MySql5.7 前言: 为什么不选择最新的MySQL8.0或者MySQL8.2呢,实际发现,如果使用这两个版本,虽然能够用同样的方法找到合适的dll,但是在编写代码的过程中往往会卡死,非常的影响效率,因此放弃…

11.28 知识回顾(Web框架、路由控制、视图层)

一、 web 框架 1.1 web框架是什么? 别人帮咱们写了一些基础代码------》我们只需要在固定的位置写固定的代码--》就能实现一个web应用 Web框架(Web framework)是一种开发框架,用来支持动态网站、网络应用和网络服务的开发。这大多…

模拟实现offsetof宏(详解)

我们在以前学过这个offsetof函数,知道它的功能是求指针相较于起始位置的偏移量,我们今天要来写出一个宏,计算结构体中某成员变量相对于起始位置的偏移。 目录 1.offsetof函数 1.1offsetof函数介绍 1.2offsetof函数代码实现 2.offsetof函数…