Python3:經典引數傳遞錯誤(你要是能回答對,來打我)
阿新 • • 發佈:2018-11-09
先出題再說:
1.傳入int 型別
def add(a,b):
a+=b
return a
a=1
b=2
c=add(a,b)
print(a,b,c)
不執行的情況下,自己先看看會有什麼結果?
2.傳入list 型別
def add(a,b):
a+=b
return a
a=[1]
b=[2]
c=add(a,b)
print(a,b,c)
同樣不執行的情況下,自己先看看會有什麼結果?
3.傳入 tuple
def add(a,b): a+=b return a a=(1) b=(2) c=add(a,b) print(a,b,c)
同樣不執行的情況下,自己先看看會有什麼結果?
現在開始公佈答案
- 1 2 3
- [1, 2] [2] [1, 2]
- 1 2 3
要是你答對了,可以來打我了。 座標 上海 , 具體地址請找我要(qq:794880479)
沒有答對的小夥伴一定很想知道原理。
我來解釋下 :
通過以上的答案可以發現 只有list型別 a的值變化了
1.list的特性是可變性
def add(a,b): print(id(a)) a+=b print(id(a)) return a a=[1] b=[2] c=add(a,b) print(a,b,c)
列印結果如下:
2705123109192
2705123109192
[1, 2] [2] [1, 2]
通過ID 的比較說明 傳入的a 和 a+=b的id 一樣,
可以得出他直接修改a指標的值,並不會建立新的指標,所以他們是一樣的。
同樣的方法咱們測試下 int型別的
def add(a,b):
print(id(a))
a+=b
print(id(a))
return a
a=1
b=2
c=add(a,b)
print(a,b,c)
列印結果:
1409444880
1409444944
1 2 3
和我們的預料的情況一樣,a+=b 並沒有修改a的指標對應的value,而是另外
建立了一個指標,並把指標交給了C,函式執行結束,這個a的另外指標也就沒有了
當列印a的時候,當然還是 最初的 a=1的值 。
如果看到我的解釋還是不理解,請看我的部落格_變數的本質。看過後保證很清晰。
再提下 dict 和list 一樣的原理 ,自己可以嘗試下。