python中a* b是什么意思_Python中的a+=b和a=a+b之间的区别是什么?
我一直以为a+=b和a=a+b是一样的,毕竟效果是一样的嘛。后来我发现并不是这么回事?我发现当变量是不可变对象时,a+=b和a=a+b是一样的,不过我注意到了前后两个a已经不是同一个对象了。而当变量是可变对象时,虽然a+=b和a=a+b的效果是一样的,但是a=a+b前后的两个a也不是同一个对象了,而a+=b前后两个a还是同一个对象。
# 不可变对象
# a+=b 前后的a不是同一个对象
>>> a=1
>>> b=2
>>> id(a)
140722530604704
>>> a+=b
>>> id(a)
140722530604768
>>> print(a)
3
# a=a+b 前后的a也不是同一个对象
>>> a=1
>>> b=2
>>> id(a)
140722530604704
>>> a=a+b
>>> id(a)
140722530604768
>>> print(a)
3
# 可变对象
# a+=b 前后的a是同一个对象
>>> a=[1,2]
>>> b=[3,4]
>>> id(a)
214391266944
>>> a+=b
>>> id(a)
214391266944
>>> print(a)
[1, 2, 3, 4]
# a=a+b 前后的a不是同一个对象
>>> a=[1,2]
>>> b=[3,4]
>>> id(a)
2143494790272
>>> a=a+b
>>> id(a)
2143494790592
>>> print(a)
[1, 2, 3, 4]
这是怎么回事呢?看了一下各位大佬写的文章,总算是弄明白了一些。
+操作调用的是__add__方法
__add__方法会返回一个新的对象,原对象不修改。
+=操作调用了__iadd__方法
__iadd__方法直接在原对象上进行更新,该方法的返回值为None。
没有该方法时,再尝试调用__add__方法。
不可变对象只有__add__方法,没有__iadd__
可变对象有__add__方法,也有__iadd__
结论
当变量是不可变对象时,a+=b和a=a+b调用的都是__add__方法,返回的是一个新对象
当变量是可变对象时,a+=b调用的是__iadd__方法,直接在原对象上进行更新;a=a+b调用的是__add__方法,返回一个新对象
来源:https://www.cnblogs.com/CharrammaBlog/p/12567797.html
python中a* b是什么意思_Python中的a+=b和a=a+b之间的区别是什么?相关推荐
- python的a b是什么意思_python – `a,b = b,a b`和`a = b之间的区别是什么? b =斐波那契的b` [复制]...
以前在我写斐波那契函数时,我试图替换 a, b = b, a+b 同 a = b b = a + b 相信它是一样的但我注意到输出是不同的(和错误的) 这两个代码不应该做同样的事情吗? 这是完整的代码 ...
- python之33个关键字详解_Python 中的关键字 with 详解
在 Python 2.5 中,with关键字被加入.它将常用的 try ... except ... finally ...模式很方便的被复用.看一个最经典的例子: with open('file.t ...
- python中字典和集合的区别_Python中字典和集合学习小结
映射类型: 表示一个任意对象的集合,且可以通过另一个几乎是任意键值的集合进行索引 与序列不同,映射是无序的,通过键进行索引 任何不可变对象都可用作字典的键,如字符串.数字.元组等 包含可变对象的列表. ...
- python 函数参数前面两个星号_Python中参数前面一个星号两个星号(*参数,**参数)起什么作用呢?...
摘要: 下文讲述Python中参数前面一个星号两个星号的功能分享,如下所示: 在Python语言中,我们经常看见参数前面 加上一个星号或两个星号 那么这些写法到底起什么作用呢? 下文将一一道来,如下所 ...
- python异常处理时所使用的保留字_Python中,下列哪个保留字不用于异常处理______________。_学小易找答案...
[单选题]维持细胞生存所必需的最基本的基因是 ( ) [单选题]从体细胞克隆高等哺乳动物的成功说明了 ( ) [单选题]细胞决定与细胞分化的关系是 ( ) [多选题]一种类型的分化细胞转变成另-种类型 ...
- python中的列表是指针吗_Python中的指针——到底指什么(二)
在 Python中的指针--到底指什么(一) 中,我们知道在Python的一切都是对象,变量其实是指向PyObject对象的名称,对不可变变量进行操作后,名称指向了另一个PyObject. 扣留对象 ...
- python中遍历字典判断是否存在_python中如何判断值在不在字典中
python中判断值在不在字典中的方法:我们可以通过for循环来进行判断.在python中for循环可以遍历任何序列的项目.语法结构:[for iterating_var in sequence:st ...
- python里删除range里的数字_python中range函数与列表中删除元素
一.range函数使用 range(1,5) 代表从1到4(不包含5),结果为:1,2,3,4 ,默认步长为1 range(1,5,2) 结果为:1, 3 (同样不包含5) ,步长为2 ...
- python语言中print函数的作用_python中如何使用print函数
Python中print语句 1.逗号分隔符 在Python中print语句可根据sys.stdout中包含的文件生成输出,它接受一个逗号分隔的对象表,如下实例:x = 1 y = 2 z = 3 p ...
- python 变量赋值是引用和拷贝_Python 中变量赋值传递时的引用和拷贝
曾经看到这样一个问题,一个字典中的元素是列表,将这个列表元素赋值给一个变量,然后修改这个列表中元素的值,结果发现,字典中那个列表也同样修改了.那个问题如下: dict = {'a':[1,2,3,4, ...
最新文章
- linux基础篇-02,linux时间管理date hwclock cal 简述
- Design Pattern - Prototype(C#)
- EditText控件的基本使用(点击Button按钮,Toast提示EditText中的内容)
- mysql测试spring事务是否生效
- (六)Vue3.0预学习
- vb.net 的 openFileDialog 控件文件筛选器使用
- iPhone 13临近发布,富士康需要在9月底前再招聘20万名工人
- winfrom下,如何实现类似QQ右下角弹出新闻
- 服务器电源控制芯片,服务器电源中的PFC控制芯片HA16141的应用.pdf
- [bzoj4945][Noi2017]游戏
- linux 系统信号忽略和system函数返回值问题(system的实现)
- opencv计算图像亮度调节_图像数据集增强方式总结和实现【数字图像处理系列四】...
- VBA代码自动缩进排版-VBA代码助手一键排版功能
- 卡片游戏 (Throwing cards away I)(队列+模拟)
- JavaScript使用百度地图API获取当前位置信息
- 产品销售份额数据统计流程图模板分享
- 提高效率5款多功能实用软件推荐
- Linux之进程的前后台切换
- MySQL自定义函数的使用及MySQL中的流程控制语句
- 数据挖掘算法之关联规则挖掘(二)FPGrowth算法
热门文章
- 开源 免费 java CMS - FreeCMS1.5-数据对象-guestbook
- 文件的上传下载功能的实现(包括进度条)[telerik控件]
- 程序员专属段子集锦 2/10
- 震惊,杨幂的脸竟然出现在了她的身体上
- java判断包含关系contains方法的使用
- pytorch版本问题:AttributeError: 'module' object has no attribute '_rebuild_tensor_v2'
- ubantu系统之快捷键使用
- Android 相关翻译
- [安全测试报告]针对某厂商的一次渗透性测试
- 常用技巧性CSS:颜色渐变,截断英文单词,阴影文字.