python這+=和=的拓展知識
關於網上的說法有兩點我想說一下
第一點
網上一直說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這+=和=的拓展知識