函数传参涉及到副本的创建与拷贝问题分析
生活随笔
收集整理的這篇文章主要介紹了
函数传参涉及到副本的创建与拷贝问题分析
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
遇到一個(gè)問題,是這樣的:
b = [1, 2, 3]def aaa(b):b.append(4)def bbb(b):b = 5aaa(b) print(b) # [1, 2, 3, 4] bbb(b) print(b) # [1, 2, 3, 4]
為什么呢,為什么通過函數(shù)傳參,去修改參數(shù),結(jié)果不一致呢?
原因是因?yàn)楹瘮?shù)傳參涉及到了參數(shù)副本的創(chuàng)建與拷貝,具體詳解:
?
圓圈2為傳參時(shí)函數(shù)建立的傳入變量(圓圈1)的副本,他們擁有共同的指向(圓圈3)。那么顯然在函數(shù)中,如果將副本重新指向一塊新的內(nèi)存,傳入變量(圓圈1)的指向并不會(huì)改變,換句話說這種操作并不能影響函數(shù)外的變量。
也就是說,源地址和副本地址2個(gè)指向相同的地址,這個(gè)地址是可以變的list形式, 那么aaa函數(shù)只是給這個(gè)共同的指向地址的內(nèi)容中添加了數(shù)據(jù),沒有改變指向地址,所以結(jié)果不變
但是函數(shù)bbb,就不一樣了,它要修改副本的地址指向,所以就這樣了.
?
?
?
參考博客:??https://blog.csdn.net/Lin_RD/article/details/88088217?
?
轉(zhuǎn)載于:https://www.cnblogs.com/yuanyongqiang/p/10877496.html
總結(jié)
以上是生活随笔為你收集整理的函数传参涉及到副本的创建与拷贝问题分析的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 王牌竞速街头车神头像框怎么获得?
- 下一篇: Dubbo 2.7.1 踩坑记