1. 程式人生 > >python這+=和=的拓展知識

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這+=和=的拓展知識