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赋值语句的详细理解相关推荐

  1. 【时序列】时序列数据如何一步步分解成趋势(trend)季节性(seasonality)和误差(residual)- 详细理解python sm.tsa.seasonal_decompose

    [时序列]时序列数据如何一步步分解成趋势(trend)季节性(seasonality)和误差(residual)- 理解python sm.tsa.seasonal_decompose 在做时序列分析 ...

  2. python赋值语句格式_Python赋值语句后逗号的作用分析

    Python赋值语句后逗号的作用分析 本文实例讲述了Python赋值语句后逗号的作用.分享给大家供大家参考.具体分析如下: IDLE 2.6.2 >>> a = 1 >> ...

  3. 在python中、下列代码的输出是什么-python面试题详细总结(附答案)

    本篇文章给大家带来的内容是关于python面试题总结(附答案),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. CPS少儿编程网-Scratch_Python_教程_免费儿童编程学习平 ...

  4. Python赋值语句的多种形式

    Python赋值语句的多种形式 Python语言本身有许多独特之处, 入门易难精通(另一个角度看,简单但强劲的语法背后隐藏了许多复杂的实现),现以Python赋值语句的多种形式为例说明. 赋值语句的特 ...

  5. python中result的用法_关于Python中的列表理解及用法

    在Python中,列表理解通常用于编写单行语句,这些语句通过可迭代对象进行迭代以创建新的列表或字典.本文首先介绍for循环如何在Python中工作,然后解释如何在Python中使用列表理解. Pyth ...

  6. 100个python算法超详细讲解:递归解决年龄问题

    [100个python算法超详细讲解]@谷哥技术 1.问题描述 有5个人坐在一起,问第5个人多少岁,他说比第4个人大2岁.问 第4个人多少岁,他说比第3个人大2岁.问第3人多少岁,他说比第2个 人大2 ...

  7. Linux下利用python实现语音识别详细教程

    Linux下python实现语音识别详细教程 语音识别工作原理简介 选择合适的python语音识别包 安装SpeechRecognition 识别器类 音频文件的使用 英文的语音识别 噪音对语音识别的 ...

  8. 关于python赋值语句、以下选项中不合法的是_关于Python赋值语句,以下选项中不合法的是 ( )_学小易找答案...

    [单选题]关于 Python 程序格式框架的描述,以下选项中错误的是 ( ) [其它]实现multi()函数,参数个数不限,返回所有参数的乘积. [简答题]我和我的 [单选题]与x > y an ...

  9. 100个python算法超详细讲解:抢30游戏

    [100个python算法超详细讲解]@谷歌学术 1.问题描述 由两个人玩"抢30"游戏,游戏规则是:第一个人先说"1"或"1,2",第 二 ...

最新文章

  1. 探测函数 中断 linux,linux中断编程函数
  2. 关于UI Automation框架
  3. 【人工智能导论】A*算法求解15数码问题 Java
  4. 学点数学(5)--线性规划对偶形式的理解
  5. Git 的安装、使用、分支、命令 一篇博客全都学会
  6. mysql炸包_炸裂!MySQL 82 张图带你飞
  7. 垃圾收集器分类与GC性能指标
  8. 分享:绘图不可不知的CAD经典技巧
  9. matlab指派问题论文,数学建模指派问题论文.doc
  10. 基于Opencv的几种立体匹配算法+ELAS
  11. 企业办公3D指纹考勤系统解决方案
  12. BUUCTF MISC刷题
  13. vue+element UI分页的使用方法
  14. Lambda表达式和Stream类的使用
  15. python代码实现进制转换
  16. Jenkin 配置 Gerrit Trigger
  17. Android开发——程序锁的实现(可用于开发钓鱼登录界面)
  18. 读书笔记:《好团队激活个人--猫鼬教你如何带团队》
  19. exynos4412驱动程序教程.0
  20. R语言 根据变量包含某些字符,生成新变量

热门文章

  1. 新浪采集内容数据自动发布
  2. 配置小程序项目的第一个页面—小程序入门与实战(五)
  3. 物联卡中心:物联卡是正规卡吗?与流量卡有什么区别?
  4. JS通过List列表生成树结构
  5. 华云数据打造企业社会责任践行范本
  6. 【区域赛总结】2015ACM-ICPC北京区域赛
  7. 艺赛旗(RPA)iS-RPA新手课堂 - 这个“鼠标”得会用
  8. telnet 不是内部或外部命令,也不是可运行的程序解决方案
  9. EventListener
  10. 论文修改建议 (JiangXY 20211108 突出自己的优势指标)