溫馨提示×

溫馨提示×

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

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

python中賦值與c語言區(qū)別有哪些

發(fā)布時間:2020-09-09 13:52:34 來源:億速云 閱讀:168 作者:小新 欄目:編程語言

小編給大家分享一下python中賦值與c語言區(qū)別有哪些,希望大家閱讀完這篇文章后大所收獲,下面讓我們一起去探討吧!

python中賦值與c語言區(qū)別?先來看看簡單的 Python 代碼在內(nèi)存中是什么樣子的:

b = 3
b = b + 5

它在內(nèi)存中的操作示意圖是這樣的:

python中賦值與c語言區(qū)別有哪些

然而,從代碼的的字面意思上看,“把 3 賦給 b,把 b 加 5 之后再賦給 b?!?/p>

也就是把代碼看成這個樣子:

b ← 3
b ← b + 5

所以下面這張在內(nèi)存中的操作圖可能更符合我們的直覺:

python中賦值與c語言區(qū)別有哪些

也即 b + 5 的值又寫回到 b 中。典型的 C 程序就是這樣的。為變量 b 分配一個 int 型的內(nèi)存單元,然后將整數(shù) 3 存放在該內(nèi)存單元中。b 就代表了該塊內(nèi)存空間,不再移動,可以更新 b 的值,但 b 在內(nèi)存中的地址就不再變化了。所以我們說 b = b + 5,就等于 b ← b + 5,把 b 的值加 5 之后還依然放入 b 中。 變量 b 和它所在內(nèi)存空間緊緊綁定在一起。

而再看看上面 Python 中的內(nèi)存示意圖,b + 5 得到了一個新值,然后令 b 指向了這個新值。換句話說,它做的是事情是這樣的:

b → 3
b → b + 5

先令 b 指向 3,再令 b 指向 b + 5 這個新值。

C 程序更新的是內(nèi)存單元中存放的值,而 Python 更新的是變量的指向。

C 程序中變量保存了一個值,而 Python 中的變量指向一個值。

如果說 C 程序是通過操縱內(nèi)存地址而間接操作數(shù)據(jù)(每個變量固定對應一個內(nèi)存地址,所以說操縱變量就是操縱內(nèi)存地址),數(shù)據(jù)處于被動地位,那么 Python 則是直接操縱數(shù)據(jù),數(shù)據(jù)處于主動地位,變量只是作為一種引用關(guān)系而存在,而不再擁有存儲功能。

在 Python 中,每一個數(shù)據(jù)都會占用一個內(nèi)存空間,如 b + 5 這個新的數(shù)據(jù)也占用了一個全新的內(nèi)存空間。

Python 的這種操作讓數(shù)據(jù)成為主體,數(shù)據(jù)與數(shù)據(jù)之間直接進行交互。

而數(shù)據(jù)在 Python 中被稱為對象 (Object)。

這句話并不太嚴謹。不過在這個簡單的例子中是成立的。

一個整數(shù) 3 是一個 int 型對象,一個 'hello' 是一個字符串對象,一個 [1, 2, 3] 是一個列表對象。

Python 把一切數(shù)據(jù)都看成「對象」。它為每一個對象分配一個內(nèi)存空間。 一個對象被創(chuàng)建后,它的 id 就不再發(fā)生變化。

id 是 identity 的縮寫。意為“身份;標識”。

在 Python 中,可以使用 id(),來獲得一個對象的 id,可以看作是該對象在內(nèi)存中的地址。

一個對象被創(chuàng)建后,它不能被直接銷毀。因此,在上個例子中,變量 b 首先指向了對象 3,然后繼續(xù)執(zhí)行 b + 5,b + 5 產(chǎn)生了一個新的對象 8,由于對象 3 不能被銷毀,則令 b 指向新的對象 8,而不是用對象 8 去覆蓋對象 3。在代碼執(zhí)行完成后,內(nèi)存中依然有對象 3,也有對象 8,變量 b 指向了對象 8。

如果沒有變量指向?qū)ο?3(即無法引用它了),Python 會使用垃圾回收算法來決定是否回收它(這是自動的,不需要程序編寫者操心)。

一個舊的對象不能被覆蓋,因舊的對象交互而新產(chǎn)生的數(shù)據(jù)會放在新的對象中。也就是說每個對象是一個獨立的個體,每個對象都有自己的“主權(quán)”。因此,兩個對象的交互可以產(chǎn)生一個新的對象,而不會對原對象產(chǎn)生影響。在大型程序中,各個對象之間的交互錯綜復雜,這種獨立性則使得這些交互足夠安全。

C 程序為每個變量都分配一個了固定的內(nèi)存地址,這保證了 C 變量之間的獨立性。

C 語言是變量(也即內(nèi)存地址)之間的交互,Python 是對象(數(shù)據(jù))之間的交互。這是兩種不同的交互方式。

看完了這篇文章,相信你對python中賦值與c語言區(qū)別有哪些有了一定的了解,想了解更多相關(guān)知識,歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!

向AI問一下細節(jié)

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

AI