亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区
Chinaunix
標(biāo)題:
關(guān)于值傳遞,引用傳遞,不可變對象,可變對象的疑問
[打印本頁]
作者:
chenxin6676
時間:
2014-12-16 18:41
標(biāo)題:
關(guān)于值傳遞,引用傳遞,不可變對象,可變對象的疑問
def ChangeInt(a):
a=10
b=2
ChangeInt(b)
print b # ->2
def ChangeList(a):
a[0]=10
b=[2]
ChangeList(b)
print b # ->[10]
def ChangeList(a):
a=[10]
b=[2]
ChangeList(b)
print b # ->[2]
以上拋開基本概念,僅僅從內(nèi)存角度來理解,如何理解呢? 費(fèi)解了兩天了,感覺還是迷糊...
不勝感激...
作者:
路人賈
時間:
2014-12-16 21:55
本帖最后由 路人賈 于 2014-12-16 22:10 編輯
函數(shù)的參數(shù)是通過賦值進(jìn)行對象的傳遞的,函數(shù)能夠改變傳入的可變對象。整數(shù)和字符串屬于不可變對象,列表和字典屬于可變對象
前兩個應(yīng)該是容易理解的,第三個的話,在函數(shù)中對a進(jìn)行賦值,并不是對可改變對象進(jìn)行改變,而是創(chuàng)建了新的列表對象,并將新的列表對象賦值給了a,但是由于作用域的關(guān)系,這里的a是一個新的變量,不同于函數(shù)外面的a,所以函數(shù)返回后,a并沒有改變。
以上是個人理解,供樓主參考,如有錯誤,歡迎指正
作者:
chenxin6676
時間:
2014-12-17 10:47
回復(fù)
2#
路人賈
我暫時的理解如下,還找不到確鑿的資料說明,只是自己試驗(yàn)的結(jié)果,不知道是否正確:
def ChangeInt(a):
a=10
b=2
ChangeInt(b)
print b # ->2
翻譯為非函數(shù)的樣子:
b=2
a=b #a的內(nèi)存地址跟b是一樣的,說明這里是內(nèi)存地址拷貝,因此賦值可以理解為指針指向
a=10 #將a指向了新創(chuàng)建的10對象,a的內(nèi)存地址發(fā)生了改變.
print b
def ChangeList(a):
a[0]=10
b=[2]
ChangeList(b)
print b # ->[10]
翻譯為非函數(shù):
b=[2]
a=b #a的內(nèi)存地址跟b是一樣的,說明這里是內(nèi)存地址拷貝,因此賦值可以理解為指針指向
a[0]=10 #將a指向的列表的第一個元素值指向內(nèi)存新創(chuàng)建的10對象,a的內(nèi)存地址沒有改變,仍然跟b的內(nèi)存地址一致.
print b
def ChangeList(a):
a=[10]
b=[2]
ChangeList(b)
print b # ->[2]
翻譯為非函數(shù):
b=[2]
a=b #a的內(nèi)存地址跟b是一樣的,說明這里是內(nèi)存地址拷貝,因此賦值可以理解為指針指向
a=[10] #重新創(chuàng)建了一個新的列表,a指向這個新列表,a的內(nèi)存地址發(fā)生了改變.
print b
總結(jié)以上3個例子,可以理解為:
1.python中的賦值"="語句,可以理解為指針的指向.
2.由于指針指向問題,故才衍生出"作用域"的概念,而不是因?yàn)橛凶饔糜虻?quot;人為限制"造成的以上結(jié)果,是吧?!
3.注意區(qū)分可變對象與不可變對象的區(qū)別.list,dict,int,char,tuple...
4.以此也推出了值傳遞與引用傳遞的概念,可以統(tǒng)一理解為python中都是引用傳遞.
作者:
路人賈
時間:
2014-12-17 11:10
你可以看看learning python這本書,有中文版的,會對理解這些有很大幫助,我也是剛接觸python,理解不是很透徹,
回復(fù)
3#
chenxin6676
歡迎光臨 Chinaunix (http://www.72891.cn/)
Powered by Discuz! X3.2