Python赋值语句的详细理解
Python赋值语句的理解
- 1.配置环境
- 2.博客由来
- 3.问题提出
- 4.问题分析
- 5.小问题
- 6.结束语
1.配置环境
使用环境:python3.7
平台:Windows10
IDE:PyCharm
2.博客由来
博主在做链表题目算法题时发现了一个有趣的现象。经过一段时间的分析博主更深入理解了Python中的赋值语句,记录在此博客中。如果你也遇到同样的问题或许这篇文章可以对你有所启发。
3.问题提出
首先请问大家一个问题,一下代码的运行结果应该是多少?
首先直接上代码
class List_Node:def __init__(self, val=0):self.val = valif __name__ == '__main__':a = List_Node(1)b = ab.val = 10print(a.val)
可能会有不少同学认为是1
,但是实际的输出结果却是10
4.问题分析
对于上面的例子,我们很快可以想到另一个例子,代码如下
c = 1d = cd = 10print(c)
那么这个结果应该是多少呢?
答案是1
我们不禁思考,这是为什么呢?
先把结论告诉大家
Python在进行赋值运算时,是将=
右边变量(a)的内存地址共享给=
左边变量(b),那么=
左边变量(b)如果改变内存中的内容,那么会引起=
右边变量(a)的改变。
我们可以通过观察变量的地址来验证这一问题,代码如下
class List_Node:def __init__(self, val=0):self.val = valif __name__ == '__main__':a = List_Node(1)b = ab.val = 10print(a.val)print("ID: a:%d\nID: b:%d"%(id(a),id(b)))
运行结果如下:
那么,对于实数赋值:
c = 1d = cd = 10print(c)
为什么d
的改变没有引起c
的改变呢?
这是因为d
的改变是通过赋值语句改变的,d
在执行d = 10
这一语句时,它指向的内存就已经和c
分离了,我们同样可以通过查看内存的方式来验证
c = 1d = cprint("执行 d = c")print("ID: c:%d\nID: d:%d"%(id(c),id(d)))d = 10print(c)print("执行 d = 10")print("ID: c:%d\nID: d:%d"%(id(c),id(d)))
再次总结一下:
Python在进行赋值运算时,是将=
右边变量(a)的内存地址共享给=
左边变量(b),那么=
左边变量(b)如果改变内存中的内容,那么会引起=
右边变量(a)的改变。
5.小问题
最后,提出一个小问题供大家思考:
class List_Node:def __init__(self, val=0):self.val = valif __name__ == '__main__':a = List_Node(1)b = List_Node(10)a.val = b.valb.val = 5print(a.val)
请问上面代码的运行结果是多少呢?
6.结束语
如果本文对你有帮助的话还请点赞、收藏一键带走哦,你的支持是我最大的动力!(づ。◕ᴗᴗ◕。)づ
Python赋值语句的详细理解相关推荐
- 【时序列】时序列数据如何一步步分解成趋势(trend)季节性(seasonality)和误差(residual)- 详细理解python sm.tsa.seasonal_decompose
[时序列]时序列数据如何一步步分解成趋势(trend)季节性(seasonality)和误差(residual)- 理解python sm.tsa.seasonal_decompose 在做时序列分析 ...
- python赋值语句格式_Python赋值语句后逗号的作用分析
Python赋值语句后逗号的作用分析 本文实例讲述了Python赋值语句后逗号的作用.分享给大家供大家参考.具体分析如下: IDLE 2.6.2 >>> a = 1 >> ...
- 在python中、下列代码的输出是什么-python面试题详细总结(附答案)
本篇文章给大家带来的内容是关于python面试题总结(附答案),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. CPS少儿编程网-Scratch_Python_教程_免费儿童编程学习平 ...
- Python赋值语句的多种形式
Python赋值语句的多种形式 Python语言本身有许多独特之处, 入门易难精通(另一个角度看,简单但强劲的语法背后隐藏了许多复杂的实现),现以Python赋值语句的多种形式为例说明. 赋值语句的特 ...
- python中result的用法_关于Python中的列表理解及用法
在Python中,列表理解通常用于编写单行语句,这些语句通过可迭代对象进行迭代以创建新的列表或字典.本文首先介绍for循环如何在Python中工作,然后解释如何在Python中使用列表理解. Pyth ...
- 100个python算法超详细讲解:递归解决年龄问题
[100个python算法超详细讲解]@谷哥技术 1.问题描述 有5个人坐在一起,问第5个人多少岁,他说比第4个人大2岁.问 第4个人多少岁,他说比第3个人大2岁.问第3人多少岁,他说比第2个 人大2 ...
- Linux下利用python实现语音识别详细教程
Linux下python实现语音识别详细教程 语音识别工作原理简介 选择合适的python语音识别包 安装SpeechRecognition 识别器类 音频文件的使用 英文的语音识别 噪音对语音识别的 ...
- 关于python赋值语句、以下选项中不合法的是_关于Python赋值语句,以下选项中不合法的是 ( )_学小易找答案...
[单选题]关于 Python 程序格式框架的描述,以下选项中错误的是 ( ) [其它]实现multi()函数,参数个数不限,返回所有参数的乘积. [简答题]我和我的 [单选题]与x > y an ...
- 100个python算法超详细讲解:抢30游戏
[100个python算法超详细讲解]@谷歌学术 1.问题描述 由两个人玩"抢30"游戏,游戏规则是:第一个人先说"1"或"1,2",第 二 ...
最新文章
- 探测函数 中断 linux,linux中断编程函数
- 关于UI Automation框架
- 【人工智能导论】A*算法求解15数码问题 Java
- 学点数学(5)--线性规划对偶形式的理解
- Git 的安装、使用、分支、命令 一篇博客全都学会
- mysql炸包_炸裂!MySQL 82 张图带你飞
- 垃圾收集器分类与GC性能指标
- 分享:绘图不可不知的CAD经典技巧
- matlab指派问题论文,数学建模指派问题论文.doc
- 基于Opencv的几种立体匹配算法+ELAS
- 企业办公3D指纹考勤系统解决方案
- BUUCTF MISC刷题
- vue+element UI分页的使用方法
- Lambda表达式和Stream类的使用
- python代码实现进制转换
- Jenkin 配置 Gerrit Trigger
- Android开发——程序锁的实现(可用于开发钓鱼登录界面)
- 读书笔记:《好团队激活个人--猫鼬教你如何带团队》
- exynos4412驱动程序教程.0
- R语言 根据变量包含某些字符,生成新变量