在 python 中 a += b 的行为方式并不总是与 a = a + b 相同,相同的操作数在不同的条件下可能会给出不同的结果。但要了解它们为何表现出不同的行为,您必须深入研究变量的工作原理。

所以首先,你需要知道幕后发生了什么。

创建新变量:

a = 10
print(" id of a : ", id(10) ," Value : ", a )

输出 :

id of a :  11094592  Value :  10

在上面的示例中,值 10 被存储在内存中,并且它的引用被分配给 a。

修改变量:

a = 10 # 为变量赋值创建新对象
print(" id of a : ", id(a) ," Value : ", a )a = a + 10 # 修改变量的值创建新对象
print(" id of a : ", id(a) ," Value : ", a )a += 10 # Modifying value of variable creats new object
print(" id of a : ", id(a) ," Value : ", a )

输出 :

id of a :  11094592  Value :  10
id of a :  11094912  Value :  20
id of a :  11095232  Value :  30

每当我们创建或修改 int、float、char、string 时,它们都会创建新对象并将新创建的引用分配给它们各自的变量。

但是列表中没有看到相同的行为

a = [0, 1] # 将此数组存储在内存中并将其引用分配给a
print("id of a: ",id(a) , "Value : ", a )a = a + [2, 3] # 这也将在内存中表现相同的存储数据并将 ref 分配给变量
print("id of a: ",id(a) , "Value : ", a )a += [4, 5]
print("id of a: ",id(a) , "Value : ", a )#但是现在这将创建新的参考。 相反,这将修改当前对象,因此指向 a 的所有其他变量也将得到更改

输出:

id of a:  140266311673864 Value :  [0, 1]
id of a:  140266311673608 Value :  [0, 1, 2, 3]
id of a:  140266311673608 Value :  [0, 1, 2, 3, 4, 5]

此时您可以看到 a = a + b 与 a += b 有时不同的原因。

考虑这些列表操作示例: 
示例 1:

list1 = [5, 4, 3, 2, 1]
list2 = list1
list1 += [1, 2, 3, 4] # 修改当前参考值print(list1)
print(list2) # 与第 4 行一样,它修改值而不创建指向 list1 的新对象变量 list2 得到更改

输出:

[5, 4, 3, 2, 1, 1, 2, 3, 4]
[5, 4, 3, 2, 1, 1, 2, 3, 4]

示例 2

list1 = [5, 4, 3, 2, 1]
list2 = list1
list1 = list1 + [1, 2, 3, 4]# list1 的内容与上述程序相同,但 list2 的内容不同。
print(list1)
print(list2)

输出:

[5, 4, 3, 2, 1, 1, 2, 3, 4]
[5, 4, 3, 2, 1]

  • 表达式list1 += [1, 2, 3, 4] 就地修改列表,这意味着它扩展了列表,使得“list1”和“list2”仍然具有对同一个列表的引用。
  • 表达式list1 = list1 + [1, 2, 3, 4] 创建一个新列表并将“list1”引用更改为该新列表,“list2”仍引用旧列表。

Python 教程之运算符(12)a += b 并不总是等价于 a = a + b相关推荐

  1. python教程:sum(1-2+3-4+...+99)

    分析:加奇数,减偶数. 方案1:定义两个变量num与sum,并令其初值都为0.如果abs(num)%2==1,则sum=sum+num:如果abs(num)%2==0,则sum=sum-num:如果a ...

  2. python入门之运算符的使用的答案_python入门教程之基本算术运算符

    一.算术运算符 运算符 + - * / % **(幂)求次方 //(取整除,向下取整)如:9//2 =4 二.比较运算符 运算符 == != <>(不等于,类似!=) < > ...

  3. python基础教程-北大学霸自学这套Python教程,7天开发12款游戏,堪称宝藏教程

    下载好向圈APP可以快速联系圈友 您需要 登录 才可以下载或查看,没有帐号?立即注册 x 学习Python的人,总会到处寻找资料,比如这里看点视频,那里看点文章,但最后依然学不好Python.因为缺乏 ...

  4. python教程15-作业讲解、集合的使用、集合运算符的使用、eval和json的使用

    python教程_小白入门15/2020/8/26 学习目标 文章目录 python教程_小白入门15/2020/8/26 p102 作业讲解1 P103 作业讲解2 P104 集合的基本使用 P10 ...

  5. python控制流教程_Python入门教程之运算符与控制流

    Python 中的运算符 什么是运算符?举个简单的例子 4 +5 = 9 . 例子中,4 和 5 被称为操作数,"+" 称为运算符. 1 . 求幂运算符 在 Java 中如果我们想 ...

  6. python 某个数是不是在某个范围内_这个Python入门教程,国内12岁小孩都能做,是小白的入门不二之选...

    简介:你曾经想知道计算机是如何工作的吗?尽管我们不能在一篇文章里面教会你所有的东西,但是可以通过学习如何写出你自己的程序来获得一个良好的开端.在这篇Python教程中,你将会学到计算机编程的基础知识, ...

  7. 简明python教程在线-简明python教程

    广告关闭 2017年12月,云+社区对外发布,从最开始的技术博客到现在拥有多个社区产品.未来,我们一起乘风破浪,创造无限可能. usrbinpython#hello_world.pyprinthell ...

  8. python菜鸟教程字典-python教程菜鸟教程学习路线

    python教程菜鸟教程学习路线,需要学Python 环境搭建.Python 中文编码.Python 基础语法.Python 变量类型.Python 运算符.Python 条件语句.Python 循环 ...

  9. 【转】简明 Python 教程

    原文网址:http://woodpecker.org.cn/abyteofpython_cn/chinese/ 简明 Python 教程 Swaroop, C. H. 著 沈洁元  译 www.byt ...

最新文章

  1. LCA(树上倍增 || rmqlca||)
  2. linux 安装包 在此作用域中尚未声明_Linux运行go项目报错:copy_file_range: bad file descriptor...
  3. CentOS7.5 使用二进制程序部署Kubernetes1.12.2(三)
  4. Git 有时候推送以及拉去不了代码解决方式(二)
  5. Thinkphp3.2在IIS中使用ISAPI_Rewrite去除index.php
  6. 使用html制作个人简历(新手)
  7. 常见的Markdownpad2运行破解以及This view has crashed!报错和Awesomium1.6.6SDK安装使用
  8. Python数据类型——逻辑值详解
  9. 直接创建和使用struct函数
  10. 哪些深度相机有python接口_三种主流深度相机介绍
  11. Ubuntu16.04安装LSD-SLAM
  12. Unity | 部分区域自由截图
  13. 文学类的小说,言情类的,没有排行榜上的
  14. Python在线办公系统毕业设计源码071116
  15. File xxx specified for property 'resourceFile' does not exist.解决方法
  16. noip2014 总结
  17. 科技云报道:2022年,产业互联网如何重建安全边界?
  18. ps怎么快速将图片变成黑白 在线PS哪个好用
  19. 净值继续回落,短期弱势难改
  20. PHP错题本功能实现,收藏| 最高效的"错题本"制作攻略!手把手教会你!

热门文章

  1. html搜索框怎么设置透明度
  2. Android 材料设计Material Design 动画篇(一)
  3. Win2008 - R2 下安装 MsSqlServer2008
  4. android计算器实训报告总结,大学生计算机实训报告
  5. Anaconda 的安装教程(图文)
  6. 电声测试仪 音频分析仪 rta噪声频谱分析仪 噪音计 声压级表 麦克风录音系统动态范围 音频采集系统输入动态范围 噪声 最大声压级 放大器增益
  7. 对非自动化测试的自动化支持
  8. 戴尔服务器怎么安装win7系统,展示戴尔电脑如何重装win7
  9. c语言复数的运算实验报告,C语言复数的运算实验报告.doc
  10. rol 循环左移 计算_第四周 算术运算、逻辑运算与移位操作指令