码迷,mamicode.com
首页 > 编程语言 > 详细

python这+=和=的拓展知识

时间:2017-09-21 23:25:17      阅读:172      评论:0      收藏:0      [点我收藏+]

标签:+=和=

关于网上的说法有两点我想说一下

第一点

网上一直说num = num + num 和 num += num是等价的,在这里我要说一下,这两个只有在num是数值的时候才是等价的,如果不是数值的话,num = num + num是把num 加上num的值赋予给num,这个是要新开辟一个空间给num的,而num+=num是修改num原来的值为num + num的结果。可能你会有点愣,没事,下面我们看看例子

a = [100]
def zhouyu(num):
    num = num + num
    print(num)
zhouyu(a)
print(a)

通过上面的理解,我们知道num = num + num其实就是把[100]加上[100]的结果赋予给了num,这个时候,num就会重新去指向这个结果,也就说如果原来num的值是[100],那么现在num的值就是[100,100],而a还是[100]。

下面说另一种

a = [100]
def zhouyu(num):
    num += num
    print(num)
zhouyu(a)
print(a)

因为num +=num 其实就是修改num本身的值,所以修改了num的值,a的值也会被改变。

第二点。

用下面两段代码的结果进行比较

a = 100
def zhouyu(num):
    num +=num
    print(num)
zhouyu(a)
print(a)

为什么执行的结果是

200

100

因为a是整数型的,除了列表和字典以外基本都是不可变的,zhouyu(a)传入的是一个a,所以num就会指向a,因为a=100是整数型的,是不可变的,所以这里就会自己去新创一个a,a=100+100所以a就是200,打印出来的就是200,而外面的a是那个a所以,就还是100。如果不怎么理解请看下面的。

a = [100]
def zhouyu(num):
    num +=num
    print(num)
zhouyu(a)
print(a)

为什么执行的结果是下面的结果呢

[100,100]

[100,100]

因为zhouyu(a)传入的是一个a,所以num就会指向a,这里的a就是列表型,是可以改变的。所以就会把上面的a改变了,这下打印出来的就都改变了。也就是说传入参数的时候会去看a是不是可变的,如果是可变的就会把外面的值改变了,如果不可变,就自己新创一个a,这时候这个a的值和函数外面的值就不一样啦


本文出自 “爱周瑜” 博客,请务必保留此出处http://izhouyu.blog.51cto.com/10318932/1967627

python这+=和=的拓展知识

标签:+=和=

原文地址:http://izhouyu.blog.51cto.com/10318932/1967627

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!