亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python與C++的引用實例分析

發布時間:2022-01-25 09:38:01 來源:億速云 閱讀:140 作者:iii 欄目:開發技術

這篇文章主要講解了“Python與C++的引用實例分析”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“Python與C++的引用實例分析”吧!

Python與C++的引用實例分析

例子,這是我的兩段根據先序序列創建二叉樹的代碼:

# 正確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)

看起來只是有無返回值的區別,實際上第二段代碼是錯誤的,其實從第二段代碼的思路來說,在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++的引用的區別了。 我是這樣理解的:Python中對內存的使用更像是不可改變的,對于一個引用所指向的對象,如果我要修改值,那么會先新找一塊內存,賦值,然后將引用指向這個新的內存塊,這樣就是修改了引用指向的位置,但是在C++中則是直接在引用所指向的內存塊上改變,例如:

Python:
a = 1print(id(a))
a = a+1print(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

所以,就像上面的第二段代碼,我傳入了創建的樹根的引用,但是當樹的結構發生改變的時候,實際上是改變了存儲的位置,這樣原本的函數外面創建的root引用指向的其實還是原來的空內存塊(突然覺得好傻。。就像被偷光了,還在等一樣。。。),但是C++的引用就是很倔強地只認那一塊內存,所以就可以直接改變使用了。 關于Python中引用與對象的關系,還牽扯到一些內存之類的知識,例如:

a = 1
b = 1print(id(a))print(id(b))# 輸出140708803374848
140708803374848

這里是因為Python中為了節省內存,會將一些短小的字符串以及數字進行緩存,這樣就會節省這類對象的建立銷毀的開銷了。 其它的就還有關于可變數據對象(mutable)和不可變對象(immutable)了,這個我之前也記錄過。總有些語言看起來很簡單,但是實際上還是要好好理解的啊。

感謝各位的閱讀,以上就是“Python與C++的引用實例分析”的內容了,經過本文的學習后,相信大家對Python與C++的引用實例分析這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

双柏县| 德清县| 阳西县| 廊坊市| 昌平区| 西畴县| 平远县| 阿合奇县| 吉木萨尔县| 那曲县| 开远市| 涿州市| 虞城县| 湟源县| 宝清县| 嘉祥县| 惠东县| 松潘县| 都江堰市| 阳高县| 时尚| 额敏县| 张掖市| 岗巴县| 临邑县| 全南县| 梨树县| 清原| 宜黄县| 台湾省| 安陆市| 津南区| 荆门市| 两当县| 友谊县| 平顶山市| 麦盖提县| 兴业县| 垫江县| 富川| 侯马市|