Python参数的传递

article/2025/8/21 17:31:04

一、参数的传递 

函数的参数传递本质上就是:从实参到形参的赋值操作。Python中“一切皆对象”,所有的赋值操作都是“引用的赋值”。所以,Python中参数的传递都是“引用传递”,不是“值传递”。

具体操作时分为两类:

  1. 对“可变对象”进行“写操作”,直接作用于原对象本身。
  2. 对“不可变对象”进行“写操作”,会产生一个新的“对象空间”,并用新的值填充这块空间。
  • 可变对象有:

字典、列表、集合、自定义的对象等

  • 不可变对象有:

数字、字符串、元组、function等

二、传递可变对象的引用

传递参数是可变对象(例如:列表、字典、自定义的其他可变对象等),实际传递的还是对象的引用。在函数体中不创建新的对象拷贝,而是可以直接修改所传递的对象。

【操作】参数传递:传递可变对象的引用

b = [10,20]
def f2(m):print("m:",id(m))    #b和m是同一个对象m.append(30)  #由于m是可变对象,不创建对象拷贝,直接修改这个对象
​
f2(b)
print("b:",id(b))
print(b)

执行结果:

m: 45765960

b: 45765960

[10, 20, 30]

三、传递不可变对象的引用

传递参数是不可变对象(例如:intfloat、字符串、元组、布尔值),实际传递的还是对象的引用。在”赋值操作”时,由于不可变对象无法修改,系统会新创建一个对象。

【操作】参数传递:传递不可变对象的引用

a = 100
def f1(n):print("n:",id(n))    #传递进来的是a对象的地址n = n+200      #由于a是不可变对象,因此创建新的对象nprint("n:",id(n))  #n已经变成了新的对象print(n)
f1(a)
print("a:",id(a))

执行结果:

n: 1663816464

n: 46608592

300

a: 1663816464

显然,通过id值我们可以看到na一开始是同一个对象。给n赋值后,n是新的对象。

四、浅拷贝和深拷贝

为了更深入的了解参数传递的底层原理,我们需要讲解一下“浅拷贝和深拷贝”。我们可以使用内置函数:copy(浅拷贝)、deepcopy(深拷贝)。

  1. 浅拷贝:拷贝对象,但不拷贝子对象的内容,只是拷贝子对象的引用。
  2. 深拷贝:拷贝对象,并且会连子对象的内存也全部(递归)拷贝一份,对子对象的修改不会影响源对象
#测试浅拷贝和深拷贝
import copy
​
def testCopy():'''测试浅拷贝'''a = [10, 20, [5, 6]]b = copy.copy(a)
​print("a", a)print("b", b)b.append(30)b[2].append(7)print("浅拷贝......")print("a", a)print("b", b)
​
def testDeepCopy():'''测试深拷贝'''a = [10, 20, [5, 6]]b = copy.deepcopy(a)
​print("a", a)print("b", b)b.append(30)b[2].append(7)print("深拷贝......")print("a", a)print("b", b)
​
testCopy()
print("*************")
testDeepCopy()

运行结果:

a [10, 20, [5, 6]]

b [10, 20, [5, 6]]

浅拷贝......

a [10, 20, [5, 6, 7]]

b [10, 20, [5, 6, 7], 30]


a [10, 20, [5, 6]]

b [10, 20, [5, 6]]

深拷贝......

a [10, 20, [5, 6]]

b [10, 20, [5, 6, 7], 30]

 五、传递不可变对象包含的子对象是可变的情况

#传递不可变对象时。不可变对象里面包含的子对象是可变的。则方法内修改了这个可变对象,源对象也发生了变化。
​
a = (10,20,[5,6])
print("a:",id(a))
​
def test01(m):print("m:",id(m))m[2][0] = 888print(m)print("m:",id(m))
​
test01(a)
print(a)

运行结果:

a: 41611632

m: 41611632

(10, 20, [888, 6])

m: 41611632

(10, 20, [888, 6])


http://chatgpt.dhexx.cn/article/JDR8Ippi.shtml

相关文章

python传参数的方法

Python的参数传递是通过传参指针来完成的,当参数指针指向了另一个变量时,它就会被传递给它。这种传递方式与 Java或C#中的传参方式是类似的,在 Python中,参数可以是一个字符串,也可以是一个对象。这个方法的好处是它不…

python中参数的传递

一、函数的参数传递本质上就是∶从实参到形参的赋值操作。Python中“一切皆对象”,所有的赋值操作都是‘引用的赋值”。所以,Python中参数的传递都是“引用传递”,不是“值传递”。具体操作时分为两类︰ 1.对“可变对象”进行“写操作”&…

Python函数参数传递

Python函数参数传递 一、前言二、了解形式参数和实际参数1.通过作用理解2.通过比喻来理解形参和实参 三、位置参数1.数量必须与定义时一致2.位置必须与定义时一致 四、关键字参数五、为参数设置默认值六、可变参数1.*parameter2.**parameter 一、前言 在调用函数时,…

计算机毕业论文外文翻译是什么,毕业论文的外文翻译是什么

毕业论文的外文翻译是什么 此栏目涵盖有关于外文翻译和毕业论文的范例,免费给你学论文的外文翻译是什么提供有关参考资料。 摘要:文章从成人学生知识基础、指导教师、写作过程监控等方面,分析了成人高校学生在毕业论文写作中存在的伪造、抄袭、专业水平低…

关于android的外文论文,毕业论文外文翻译-Android开发

毕业论文外文翻译-Android开发 (11页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 9.90 积分 毕业设计(论文)外文翻译 毕业 论文题目 基于 Android 手机通讯录的设计与实现 作 者 姓 名 所学专业…

在哪能查到英文论文?

不论是撰写英文论文还是引用外文文献,写论文的过程中想必缺不了检索合适的英文论文这个步骤,在本篇内容里,不仅教会你如何查到英文论文,还要教会你怎么样快速找到合适的英文论文!听起来是不是令人心驰神往,…

计算机毕业论文外文译文,计算机毕业论文外文文献译文

计算机毕业论文外文文献译文 外文文献原文What is ASP.NET? ASP.NET is a programming framework built on the common language runtime that can be used on a server to build powerful Web applications. ASP.NET offers several important advantages over previous Web…

如果想要直到一篇外文论文的质量

首先在CCF A类中寻找 然后view这篇论文,然后点击这篇论文所属的期刊名称2处 就可以看到引用得分和影响因子了,3处 文献鸟自动推送:https://www.storkapp.me/main.php 文献鸟使用的教学视频:https://www.bilibili.com/video/BV1tf4…

关于php的外文论文,php毕业设计外文翻译--通过PHP访问MySQL(适用于毕业论文外文翻译+中英文对照).doc...

[摘要]PAGE 原文:? ? Getting PHP to Talk to MySQl Now that you’re comfortable using the MySQL client tools to manipulate data in the database, you can begin using PHP to display and modify data from the database. PHP has standard functions for…

都有哪些查找和下载英文文献的方法?

很多朋友在查找文献的时候,都不知道该从哪里找,也不知道从哪里下载,怎么下载,尤其是想要查找英文文献。其实查询和下载英文文献无非以下三种方式: 选择一些比较权威,内容丰富,基本覆盖所有学科…

面向对象实现游戏聊天中的敏感词屏蔽功能,将敏感词汇用星号***替换

import java.util.Scanner;//新建一个类 public class Replace {// 定义一个字符串String commons;// 建一个替换的方法public void replace() { //控制台输入Scanner sc new Scanner(System.in);// 提示输出(为方便功能实现,此处提示内定的敏感词汇&am…

腾讯敏感词汇大全_腾讯数平精准推荐 | OCR技术之识别篇

腾讯数平精准推荐(Tencent-DPPR)团队一直致力于实时精准推荐、海量大数据挖掘等领域的技术研发与落地。 在社交广告推荐领域,团队自研的深度在线点击率预估算法及全流程实时推荐系统,持续多年提升社交广告点击率。图像作为当前社交广告最重要的展示形式,文字识别、物体识别等…

小程序中关于敏感词汇检测

小程序审核增加敏感词汇校验,避免违法违规而被停用服务或者投诉。 本文例子引用的百度AI开发者提供的API: 链接位置:https://console.bce.baidu.com/ai/#/ai/ocr/overview/index 创建应用后生成应用对应的id和key 应用到小程序中,&#xff…

Python 如何检测敏感词汇

设计思路:根据敏感词库文件筛选,查看输入的文本中是否包含敏感词汇。从而过滤出相关的敏感词。 【阅读全文】 导入应用相关的模块。 import os import logging import sys导入UI界面相关的模块。 from PyQt5.QtWidgets import QApplication,QWidget,…

敏感词汇工具类sensitive word的使用及详解

简述: 1.平时工作中,只要涉及到用户可以自由发言(博客、文档、论坛),就要考虑内容的敏感性处理,sensitive word工具是一个快速的敏感词过滤工具,基于 DFA 算法实现的高性能敏感词工具(mirrors / houbb / s…

Python敏感词汇检测

只要思想不滑坡,办法总比困难多 昨天在写练习题的时候写到这点特别迷,一直绕不过这个弯,最后也算是成功实现吧,记录一下,防止下次再绕的出不来。 之前访问的的Github镜像站一直触发滥用检测机制,着实很烦…

敏感词汇检测

1、今天做测试的时候抓到一个数据包,发现一个txt文件(CensorWords.b7e4bfb.txt),第一眼反应以为是系统被入侵了,被入侵者传了个txt到服务器上面,后面发现不对啊,攻击的话也不应该上传这种txt&am…

利用Python做简单的数据可视化

import numpy as np import pandas as pd import matplotlib.pyplot as plt import seaborn as sns from pylab import mpl # 正常显示中文标签 mpl.rcParams[font.sans-serif] [KaiTi] # 正常显示负号 mpl.rcParams[axes.unicode_minus] Falseimport warnings warnings.filt…

Python做风险控制|找出形成环状投资的公司

大家好,我是小小明。 今天我将带大家利用python找到关系数据的环。先说下需求和背景: 需求描述 某投资机构需要考虑各公司的投资风险,手上一份各公司投资方向的数据,主要字段是投资者和被投资者。 而有部分公司并不是真的投资…