本篇文章給大家分享的是有關Python與C++引用的示例分析,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。
專注于為中小企業(yè)提供成都做網(wǎng)站、成都網(wǎng)站設計服務,電腦端+手機端+微信端的三站合一,更高效的管理,為中小企業(yè)凌海免費做網(wǎng)站提供優(yōu)質的服務。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動了上千多家企業(yè)的穩(wěn)健成長,幫助中小企業(yè)通過網(wǎng)站建設實現(xiàn)規(guī)模擴充和轉變。
在用Python寫建二叉樹的代碼的時候遇到了這個問題,原因就是把Python的“引用”與C++的“引用”搞混了,這兩種語言中都有“引用”名詞,雖然大部分時候很像,其實還是有區(qū)別的。這里記錄一下,注意,這里只是我自己的一點個人理解,在找到更好的理解之前,先這樣理解吧!
例子,這是我的兩段根據(jù)先序序列創(chuàng)建二叉樹的代碼:
# 正確 pos = 0 def create(seq): global pos ch = seq[pos] pos += 1 if ch == '#': return None else: temp = TreeNode(ch) temp.left = create(seq) temp.right = create(seq) return temp seq = "abd###ce###" root = create(seq)
還有這個:
# 錯誤 def create(root): global pos if(seq[pos]=='#'): root = None pos += 1 return root = TreeNode(seq[pos]) pos += 1 root.left = None root.right = None create(root.left) create(root.right)
看起來只是有無返回值的區(qū)別,實際上第二段代碼是錯誤的,其實從第二段代碼的思路來說,在C++里面可以這樣寫:
void create(tree & t){ char ch = str[pos++]; if(ch=='#'){ t = NULL; return; } t = new node; t->val = ch; create(t->left); create(t->right); }
這就是Python中與C++的引用的區(qū)別了。
我是這樣理解的:Python中對內存的使用更像是不可改變的,對于一個引用所指向的對象,如果我要修改值,那么會先新找一塊內存,賦值,然后將引用指向這個新的內存塊,這樣就是修改了引用指向的位置,但是在C++中則是直接在引用所指向的內存塊上改變,例如:
Python: a = 1 print(id(a)) a = a+1 print(id(a)) # 輸出 140708803374848 140708803374880
在C++中:
int t = 1; int & a = t; printf("%d %d\n", &a, a); a += 1; printf("%d %d\n", &a, a); # 輸出 7208712 1 7208712 2
所以,就像上面的第二段代碼,我傳入了創(chuàng)建的樹根的引用,但是當樹的結構發(fā)生改變的時候,實際上是改變了存儲的位置,這樣原本的函數(shù)外面創(chuàng)建的root引用指向的其實還是原來的空內存塊(突然覺得好傻。。就像被偷光了,還在等一樣。。。),但是C++的引用就是很倔強地只認那一塊內存,所以就可以直接改變使用了。
關于Python中引用與對象的關系,還牽扯到一些內存之類的知識,例如:
a = 1 b = 1 print(id(a)) print(id(b)) # 輸出 140708803374848 140708803374848
這里是因為Python中為了節(jié)省內存,會將一些短小的字符串以及數(shù)字進行緩存,這樣就會節(jié)省這類對象的建立銷毀的開銷了。
其它的就還有關于可變數(shù)據(jù)對象(mutable)和不可變對象(immutable)了,這個我之前也記錄過??傆行┱Z言看起來很簡單,但是實際上還是要好好理解的啊。
以上就是Python與C++引用的示例分析,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注創(chuàng)新互聯(lián)行業(yè)資訊頻道。
文章題目:Python與C++引用的示例分析
文章起源:http://bm7419.com/article4/igsdoe.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站導航、做網(wǎng)站、外貿網(wǎng)站建設、電子商務、品牌網(wǎng)站制作、云服務器
聲明:本網(wǎng)站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)