关于网上的说法有两点我想说一下
第一点
网上一直说num = num + num 和 num += num是等价的,在这里我要说一下,这两个只有在num是数值的时候才是等价的,如果不是数值的话,num = num + num是把num 加上num的值赋予给num,这个是要新开辟一个空间给num的,而num+=num是修改num原来的值为num + num的结果。可能你会有点愣,没事,下面我们看看例子
1
2
3
4
5
6
|
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]。
下面说另一种
1
2
3
4
5
6
|
a
=
[
100
]
def
zhouyu(num):
num
+
=
num
print
(num)
zhouyu(a)
print
(a)
|
因为num +=num 其实就是修改num本身的值,所以修改了num的值,a的值也会被改变。
第二点。
用下面两段代码的结果进行比较
1
2
3
4
5
6
|
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。如果不怎么理解请看下面的。
1
2
3
4
5
6
|
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的值和函数外面的值就不一样啦
本文转自 周子琪 51CTO博客,原文链接:http://blog.51cto.com/izhouyu/1967627