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