Python变量引用浅析

Python 引用 从懵懂到精通!!! 阅读详情

引言:
对于刚接触Python语言的同学来说,可能不太了解Python中参数赋值的机制:在Python中,对一个变量的赋值,实际上是修改了数据的引用。 本文将在下面举几个例子来帮助说明该机制


首先我们来证明一下,对于变量的赋值实际上是修改了数据的引用这个描述:


从ipython的运行结果中,我们可以看出,当给一个变量赋值时,其实对于该变量a而言,只是一个标签(数据的引用),类似于下图

而将以赋值的变量a赋给另一个新变量b时,实际上,对于该新变量b而言,依然是该以赋值变量a所对应的常量10的一个标签,类似于下图

所以当我们修改a的值,并不会修改b的引用,只是简单地把a修改为了新值20的引用,此时对应的图示为


函数参数的传递:
结论:对于Python中函数参数的传递,这一点有别于其他语言,他传递的是实参所对应的引用而不是实参所对应的值。
我们用一个测试程序来帮助说明:
[Note:python中的id函数返回的结果是该参数对应的内存地址]

def printID(para):
	print("Input para's id is {}".format(id(para)))

para = 10
print("10's id is {}".format(id(para)))
printID(para)

-------------------------
输出结果:
10's id is 1746174320
Input para's id is 1746174320

由此可见,在传递参数时,确实传递的是引用。

函数返回值的传递:
结论:函数在传递返回值时,也是传递该参数对应数据的引用。
我们用一个测试程序来帮助说明:

def printID():
	r = 2
	print("2's id = {}".format(id(2)))
	return r

r = printID()
print("r's id = {}".format(id(r)))

---------------------------------
输出结果:
2's id = 1746174064
r's id = 1746174064

由此可见,函数在传递返回值确实传递也是该参数对应数据的引用。

函数内部参数值的修改:
结论:函数中若对传入的参数进行修改,只会在函数中生效,而无法改变传入的实参值:
我们用一个测试程序来帮助说明:

def test(num):
	num = 10
	print("function's num = {}".format(num))

gl_num = 1
test(gl_num)
print("num = {}".format(gl_num))

----------------------------------
输出结果:
function's num = 10
gl_num = 1

为了方便大家更好地理解,我将用下图说明:


再未执行函数中num = 10这一语句时,两个"标签":num和gl_num的引用图示为红线,当执行num = 10后,num就指向了10对应的内存地址,而gl_num指向的地址依旧不变。此外,这也能从另一方面说明,函数中传递的参数与实参并不是同一个"标签",只是对于某一个地址的两个不同的"标签"。


如果觉得我有地方讲的不好的或者有错误的欢迎给我留言,谢谢大家阅读(点个赞我可是会很开心的哦)~

Python中变量和引用及标识符命名规则 Python中的变量和引用 阅读详情

相关推荐

Ubuntu20.04配置PX4环境启动或编译jmavsim 出现的错误及解决办法

错误1:ant命令未找到

Iamsonice的博客 8855

2019-03-23日报

变量的引用 变量 和 数据 都是保存在 内存 中的 在 Python 中 函数 的 参数传递 以及 返回值 都是靠 引用 传递的 在 Python 中 变量 和 数据 是分开存储的 数据 保存在内存中的一个位置 变量 中保存着数据在内存中的地址 变量 中 记录数据的地址,就叫做 引用 使用 id() 函数可以查看变量中保存数据所在的 内存地址 注意:如果变量已经被定义,当给一个变量赋...

qq_43661847的博客 533

论文学习:Towards Automated Infographic Design:Deep Learning-based Auto-generation of Extensible Timeline

title: “Towards Automated Infographic Design:Deep Learning-based Auto-generation of Extensible Timeline” tags: [“论文评述”, “报告”] date: 2019-08-22 author: 叶慧 mathjax: true 论文:Towards Automated Infograph...

xiaoyehahaha的博客 731

python基础8 - 变量2

1. 变量的引用 变量 和 数据 都是保存在 内存 中的 在 Python 中 函数 的 参数传递 以及 返回值 都是靠 引用 传递的 1.1 引用的概念 在 Python 中 变量 和 数据 是分开存储的 数据 保存在内存中的一个位置 变量 中保存着数据在内存中的地址 变量 中 记录数据的地址,就叫做 引用 使用 id() 函数可以查看变量中保存数据所在的...

477

不用SE63逐个翻译!ABAP函数LXE_OBJ_TEXT_PAIR_WRITE批量处理TCODE描述的3种姿势

本文介绍了三种利用ABAP函数LXE_OBJ_TEXT_PAIR_WRITE批量翻译SAP事务码(TCODE)描述的高效方案,旨在替代SE63逐个翻译的低效操作。内容涵盖从基础循环、Excel导入到全自动程序集成的实现方法,帮助开发者显著提升批量翻译效率,并深入解析了SAP翻译体系的核心原理与实战技巧。

weixin_42593130的博客 659

A.特定领域知识图谱知识推理方案:知识图谱推理算法综述[五]-GeniePath会自动过滤多度“邻居“的图神经网络算法。

构图对于GNN格外重要。那么怎样构图才有信息、有意义呢?如果节点的邻居只有自己,即邻接矩阵为对角阵时,GNN会退化成一个DNN模型。图中每个节点都是孤立的,相当图信息并不能相比其他方法带来增益。如果图特别稠密,比如是一个clique,即每个节点都和所有其他节点有边连接。同样的,这样的图信息同样是信息熵为0。经验上讲,节点度分布有区分度的图是相对有价值的。查看图的节点度分布。比如二类分类,分析正负例的图拓扑当然,构图和实际场景强相关。

丨汀、的博客 437

python的变量的引用与赋值的学习

字典或者JSON数据,我们有时候需要修改字典的值,如果字典的结构层次很深,修改起来就很繁琐。由于变量和字典的值同时指向了同一个列表,这是因为列表是可变对象,当你通过变量修改了列表的内容时,所有指向该列表的引用都会反映出这些修改,字典的值得到了预期的修改。并没有实现预期的功能,原因与文章开头的第一段代码相同,变量只是被重新赋值,无法将变量的改变传递到字典的值。这是因为列表是可变对象,当你通过一个引用修改了列表的内容时,所有指向该列表的引用都会反映出这些修改。在这个代码中,对字典的一个值的修改很不简洁。

xulibo5828的博客 1083

RT-DETR改进策略【损失函数篇】| 通过辅助边界框计算IoU提升检测效果(Inner_GIoU、Inner_DIoU、Inner_CIoU、Inner_EIoU、Inner_SIoU)

为了弥补现有 IoU 损失在不同检测任务中泛化性弱和收敛速度慢的问题,·Inner-IoU·通过引入比例因子 “ratio” 来控制辅助边界框的尺度大小,利用不同尺度的辅助边界框来计算损失,从而加速边界框回归过程。

Limiiiing的博客 1962

Python学习之路-----变量的引用

基本数据类型的引用        在Python中定义一个数据便在内存中开辟一片空间来存储这个变量的值,这块已经被分配的内存空间便会有一个内存地址。访问这块内存需要用到变量名,变量名实际存储的是变量的地址在内存中的地址,但是使用print()函数得到的确实这块内存中实际的地址。这个就当成规定就好,没必要纠结。        获得变量在内存中的地址,可以使用id()函数。常规使用        变量...

shen_chengfeng的博客 1万+

uniapp [微信小程序] - 详解微信小程序端接入mqtt全流程及示例源码教程,uniApp微信小程序端如何接入MQTT插件并实现连接/断开+发布订阅+消息队列+离线重连等各种示例代码(开箱即用)

uniapp微信小程序接入MQTT,uniapp中使用mqtt,uniapp 微信小程序端接入mqtt示例代码教程,适用于微信小程序的MQTT插件,uniapp开发微信小程序连接mqtt,uniApp微信小程序接入MQTT协议,uniapp vue3微信小程序使用MQTT的小例子接入流程,使用uniapp开发小程序接入mqtt,如何在uniapp项目中使用mqtt,uniapp mqtt的使用示例,mqtt连接报错,如何在项目里集成mqtt,Mqtt协议,主动连接mqtt,订阅消息,实现发布,订阅和接收消息

🏆 前端领域优质创作者 2880

YOLO26 FP16/INT8混合量化实战:精度无损+速度拉满,边缘设备部署最优解

这是混合量化的灵魂,告诉量化器:哪些层不准动,保留FP16。"""判断是否为量化敏感层 → 是则豁免为FP16返回 True=敏感层(FP16),False=可量化(INT8)"""# 1. 检测头回归分支# 2. 小通道1×1卷积# 3. SiLU 激活# 4. 残差ShortcutYOLO26想要在Jetson、RK3588、昇腾、嵌入式NPU上真正落地,FP16/INT8混合量化是唯一最优解。它的核心逻辑不是玄学,而是工程上的精准取舍能量化的层,全部INT8榨性能;

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 746

【Python】变量的引用

【Python】变量的引用

"謓泽"正在路上朝着"攻城狮"方向"前进四"! 1389

以太网MII、RMII、GMII、RGMII(三)

RMII接口收发的数据位宽为2bit,因此管脚数目大为减少,在高密端口PHY中应用较多,但是由于其是MAC和PHY共用一个参考时钟,接口之间的距离不能太远;一般的GMII接口都有两个发送参考时钟:TX_CLK和GTX_CLK,两者的方向是不一样的,前者有PHY提供(同MII),后者由MAC或外部参考时钟源提供,绝大多数GMII接口都是兼容MII接口的,在用作MII模式时,使用TX_CLK和8根数据线中的4根。MII接口中的接收时钟和发送时钟是分开的,而且都是由PHY芯片提供给MAC芯片的。

qq_42357877的博客 2329

python函数里面引用外部变量_Python基础 变量进阶

目标变量的引用可变和不可变类型局部变量和全局变量01. 变量的引用变量 和 数据 都是保存在 内存 中的在 Python 中 函数 的 参数传递 以及 返回值 都是靠 引用 传递的1.1 引用的概念在 Python 中变量 和 数据 是分开存储的数据 保存在内存中的一个位置变量 中保存着数据在内存中的地址变量 中 记录数据的地址,就叫做 引用使用 id() 函数可以查看变量中保存数据所在的 内存地...

weixin_39904268的博客 7515

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

Python | 变量的引用

一、变量的引用 变量 和 数据 都是保存在内存中的 在Python中函数的 参数传递 以及 返回值 的都是靠 引用 传递 1、引用 Python中: 变量 和 数据 是分开存储的; 数据保存在内存中的一个位置;变量中保存着数据在内存中的地址 变量中记录数据的地址,就叫做引用 使用 id() 函数可以查看变量中保存数据所在的内存地址 <注> 如果变量已经被定义,当给一个变量赋值的时候...

hhhxykeke的博客 6317

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

python中的变量的引用_python中的变量引用小结

python的变量都可以看成是内存中某个对象的引用。(变量指向该内存地址存储的值)1.python中的可更改对象和不可更改对象python中的对象可以分为可更改(mutable)对象与不可更改(immutable)对象strings, tuples, 和numbers是不可更改的对象list,dict等则是可以修改的对象。 如果某个变量指向不可更改的对象,则重新赋值时。原对象被抛弃,变量会指向一个...

weixin_39586683的博客 1558

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Python的类变量引用

文章目录 记一下对python变量的理解。 查看如下代码 class TestObj(object): pass class Child(object): properties = {} move_duration = TestObj() test = move_duration def __init__(self): super(Child, self).__init__()...

yzx的专栏 3253

python中变量,对象和引用详解

本文介绍了python中变量,对象和引用之间的关系,通过阅读文本,可以深刻的理解python的对象。

ttug22的博客 941

再谈Python的引用和变量

再谈Python的引用和变量 上一次我们介绍了一个有用的代码可视化工具Python Tutor,说到我们还要通过这个工具再探讨一下Python引用相关的话题。因此有了本文。 引用 观察代码框下方的布局,可以看到两个按钮之下还有三个下拉菜单,依次点击之后本酱发现了一个神奇的选项:render all objects on the heap (Python/Java)。即图中红框处下拉菜单的第三个选项...

Learn 771

python变量名称引用变量_Python-变量对象引用

学习python首先要了解这三个的关系,变量、对象、引用、类型这个要记住:类型存在于对象、变量通过引用链接上对象变量在赋值的时候才创建,可以引用任何类型的对象、并且使用之前比许进行赋值。例如:》》:a = 3其实是完成了三个事情:1.创建了一个int类型的对象32.创建了一个名为a的对象3.将变量名a与int类型的对象3相连接变量实际上是到对象内存空间的一个指针,变量是一个系统表的元素,拥有指向对...

weixin_39868414的博客 514

Python编程进阶 关于变量引用这点事

文章目录一、变量的引用1、 引用的概念2、变量引用的示例3、函数的参数和返回值的传递二、可变和不可变类型1、分类2、不可变类型3、可变类型4、哈希 hash三、局部变量和全局变量1、 局部变量(1)局部变量的作用(2)局部变量的生命周期2、 全局变量(1)函数不能直接修改 `全局变量的引用`(2)在函数内部修改全局变量的值(3)全局变量定义的位置(4)全局变量命名的建议 一、变量的引用 变量 和 数据 都是保存在 内存 中的 在 Python 中 函数 的 参数传递 以及 返回值 都是靠 引用 传递的

hanjinjuan的博客 1794

Python中的变量、对象、引用

什么是变量? 对于变量,在数学中我们已经了解过,就是一个值可能会改变的量。在C++中,我们对变量的认识应该相当于一个标识符,创建一个变量,即开辟一块内存然后给这块内存起个名字,那么这个名字就是“变量”,当然,这个变量的含义和内存地址以及指针都是不相同的。 那么在Python中,变量意味着什么呢?按照我的理解,一言蔽之,就是一个指针。这确实和之前学过的强类型语言是有不同的。 为什么这么说呢?首先,python中的变量是没有类型的,有类型的是“对象”,而不是变量。变量没有类型,那么就意味着它可以随意指向任何对象

weixin_52026996的博客 803

python中引入变量_Python中变量传递时的引用和赋值

导读:Python中不明确区分赋值和应用,一般对静态变量的传递为赋值,对动态变量的传递为引用。(注,对静态变量首次传递时也是应用,当需要修改静态变量时,因为静态变量不能改变,所以需要生成一个新的空间存储数据)个人觉得分清楚规则即可比较容易的区别。Python中不明确区分赋值和应用,一般对静态变量的传递为赋值,对动态变量的传递为引用。(注,对静态变量首次传递时也是应用,当需要修改静态变量时,因为静态...

weixin_28755847的博客 983

python 变量进阶(引用)

文章目录前言变量进阶(理解)01. 变量的引用1.1 引用的概念1.2 `变量引用` 的示例1.3 函数的参数和返回值的传递02. 可变和不可变类型哈希 `(hash)`03. 局部变量和全局变量3.1 局部变量局部变量的作用局部变量的生命周期3.2 全局变量1) 函数不能直接修改 `全局变量的引用`2) 在函数内部修改全局变量的值3) 全局变量定义的位置4) 全局变量命名的建议 前言 变量进阶(理解) 变量的引用 可变和不可变类型 局部变量和全局变量 01. 变量的引用 变量 和 数据 都是保存

weixin_42109053的博客 1002

python中变量的地址引用和拷贝

python中变量的地址引用和拷贝 最近在自学python,看官方文档的时候被copy弄懵了,所以恶补了一下关于变量到底是怎么回事的知识,总结一下自己思考和参考其他文章的内容,此篇作为备忘录(岁数大了,记性不好!哭!)。 python语言中变量的实现方式就是引用语义,在变量里面保存的不是你所附的值本身,而是这个值在内存中的空间地址(可以用内置函数id()来查看一个变量的引用地址)。采用这种...

weixin_41765330的博客 1833

Python 变量,对象和引用

Python中,当输入a = 3时,Python怎么知道那代表一个整数呢?在这种情况下,Python怎么知道 a是什么? 变量创建: 一个变量(也就是变量名),就像a,当代码第一次给它赋值时就创建了它。从技术上讲,Python在代码运行之前先检测变量名,但你可以理解为最初的赋值操作在创建变量。 变量类型: 变量永远不会拥有任何和它关联的类型信息或约束。类型的概念存在于对象而不是...

xiaoyu_wu的博客 723
上一篇: Windows下使用sh指令的方法
下一篇: [Python] numpy中运算符* @ mutiply dot的用法分析
大鲨鱼冲鸭
博客等级 码龄9年 249粉丝 185原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值