首页 新闻 会员 周边 捐助

为什么a+=b比a=a+b效率高

0
悬赏园豆:100 [待解决问题]

本人是新手,高手不喜欢这种问题别骂,我只想知道在处理过程是怎么样的

python中,如:
创建变量a和b,并赋值
a=1
b=2
那么这个过程是不是,先在内存中先创建两个房间(这个地方叫什么呢,其实我不太懂,求高手指点下):房间1保存1的值,房间2保存2的值,然后再把房间1和房间2这两个房间(是叫对象吗)的地址赋值给a和b,也就是说a,b实际上不是等于1和2,而是指向了1,2保存的地址,这应该就是书上就的对象引用 与对象吧,如果关于上面我解理的不对,请高手一定要指正我,回复我,我只是个未知欲比较强的新手~~~啊里嘎多~~~

那么问题来了,为什么a+=b有时比a=a+b效率高,其实我对这两个语句的执行与处理过程不是太懂

大概执行与处理过程是这样的?(其实我一点都不清楚这个过程,我只是写出我的理解,这个真的要高手来回答我~~一定要回答哇)
1.a+=b的过程:
首先,这个语句的意思实际上是把a+b值相加再赋值给a,那么a+=b的过程是怎么处理的?
是不是先去房间1取a对象的值=1,然后再去房间2取b对象的值=2,然后让他们相加,得出的新的值=3,然后把3这个值保存到原来房间1的地方,并覆盖了房间1原来保存的1值?(乱了),还是把新的值=3,直接使用一个新地方(房间3)保存值3,再把房间3的地址赋值给a?

2.a=a+b的过程
首先是不是先去房间1取a对象的值=1,然后再去房间2取b对象的值=2,然后让他们相加,得出的新的值=3,并把新值3,保存到房间3,然后把房间3的地址赋值给a

个人的理解是以上这样的,按我的理解,两个语句的处理过程是一样的,为什么a+=b比a=a+b的效率高?我是真心不太懂,
还有,书上说的,a+=b实际上是只取了一次a的值,而a=a+b取了多次a的值(到底是几次,我也没搞懂),真心希望高手能详细点回复下这两个语句的处理过程,这将影响我今后的学习,谢谢,一定要详细点说出他们的处理过程~~~

MikasaAckerman的主页 MikasaAckerman | 初学一级 | 园豆:102
提问于:2015-07-02 11:56
< >
分享
所有回答(9)
0

我怎么觉得效率一样呢

幻天芒 | 园豆:37207 (高人七级) | 2015-07-02 12:03
0

无聊.先不说这个要看编译器.

就算真要纠结这些事儿,直接去学汇编就好了

吴瑞祥 | 园豆:29449 (高人七级) | 2015-07-02 12:18
-4

这个a+=b 就等价于a=a+b,就好像是一个字他有不同的写法,有繁体字、简体字,就笔画不同而已

Alawn_wu | 园豆:204 (菜鸟二级) | 2015-07-02 12:38
0

这个问题适合上知乎问,各种装逼高手都有。

http://www.zhihu.com/question/20114936

 

这儿也就只有我偶尔装一装,还不是高手。

爱编程的大叔 | 园豆:30844 (高人七级) | 2015-07-02 12:48
0

我觉得一编译,就一样了。

angelshelter | 园豆:9914 (大侠五级) | 2015-07-02 12:57
0

进行编译的时候 a+=b 只处理了4个字符,a=a+b处理了5个。哈哈哈…

Firen | 园豆:5385 (大侠五级) | 2015-07-02 13:04

神回复。 屌!

支持(0) 反对(0) 问天何必 | 园豆:3311 (老鸟四级) | 2015-07-02 14:46

 @问天何必: 建议还是混淆一下,这样所有变量都会变成这个样子的。 

支持(0) 反对(0) 空明流光 | 园豆:111 (初学一级) | 2015-07-02 18:19
0

编码的时候,注意程序在主要操作上效率就可以了,如果这一句也要纠结,写代码就很困难了。

空明流光 | 园豆:111 (初学一级) | 2015-07-02 18:18
0

看这个了:

http://www.zhihu.com/question/27616495

会长 | 园豆:12463 (专家六级) | 2015-07-02 19:15
0

 python 的 a += b 和 a = a + b 运算不是完全等价,第一个是自增,即对 a 原引用的对象增加值;第二个则是先相加,创建了一个值位 a + b 的对象,引用到 a.

天青蓝 | 园豆:204 (菜鸟二级) | 2015-07-03 01:23
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册