Python賦值和C指針之間有什么區別?
一、Python賦值和C指針之間的區別
在 Python 中,每一個數據都會占用一個內存空間,如 b + 5 這個新的數據也占用了一個全新的內存空間。
Python 的這種操作讓數據成為主體,數據與數據之間直接進行交互。
而數據在 Python 中被稱為對象 (Object)。
這句話并不太嚴謹。不過在這個簡單的例子中是成立的。
一個整數 3 是一個 int 型對象,一個 ‘hello’ 是一個字符串對象,一個 [1, 2, 3] 是一個列表對象。
Python 把一切數據都看成「對象」。它為每一個對象分配一個內存空間。 一個對象被創建后,它的 id 就不再發生變化。
id 是 identity 的縮寫。意為“身份;標識”。
在 Python 中,可以使用 id(),來獲得一個對象的 id,可以看作是該對象在內存中的地址。
一個對象被創建后,它不能被直接銷毀。因此,在上個例子中,變量 b 首先指向了對象 3,然后繼續執行 b + 5,b + 5 產生了一個新的對象 8,由于對象 3 不能被銷毀,則令 b 指向新的對象 8,而不是用對象 8 去覆蓋對象 3。在代碼執行完成后,內存中依然有對象 3,也有對象 8,變量 b 指向了對象 8。
如果沒有變量指向對象 3(即無法引用它了),Python 會使用垃圾回收算法來決定是否回收它(這是自動的,不需要程序編寫者操心)。
一個舊的對象不能被覆蓋,因舊的對象交互而新產生的數據會放在新的對象中。也就是說每個對象是一個獨立的個體,每個對象都有自己的“主權”。因此,兩個對象的交互可以產生一個新的對象,而不會對原對象產生影響。在大型程序中,各個對象之間的交互錯綜復雜,這種獨立性則使得這些交互足夠安全。
C 程序是通過操縱內存地址而間接操作數據(每個變量固定對應一個內存地址,所以說操縱變量就是操縱內存地址),數據處于被動地位,那么 Python 則是直接操縱數據,數據處于主動地位,變量只是作為一種引用關系而存在,而不再擁有存儲功能。C 程序為每個變量都分配一個了固定的內存地址,這保證了 C 變量之間的獨立性。
C 語言是變量(也即內存地址)之間的交互,Python 是對象(數據)之間的交互。這是兩種不同的交互方式。
延伸閱讀:
二、低級語言與高級語言
最初的計算機程序都是用0和1的序列表示的,程序員直接使用的是機器指令,無需翻譯,從紙帶打孔輸入即可執行得到結果。后來為了方便記憶,就將用0、1序列表示的機器指令都用符號助記,這些與機器指令一一對應的助記符就成了匯編指令,從而誕生了匯編語言。無論是機器指令還是匯編指令都是面向機器的,統稱為低級語言。因為是針對特定機器的機器指令的助記符,所以匯編語言是無法獨立于機器(特定的CPU體系結構)的。但匯編語言也是要經過翻譯成機器指令才能執行的,所以也有將運行在一種機器上的匯編語言翻譯成運行在另一種機器上的機器指令的方法,那就是交叉匯編技術。
高級語言是從人類的邏輯思維角度出發的計算機語言,抽象程度大大提高,需要經過編譯成特定機器上的目標代碼才能執行,一條高級語言的語句往往需要若干條機器指令來完成。高級語言獨立于機器的特性是靠編譯器為不同機器生成不同的目標代碼(或機器指令)來實現的。那具體的說,要將高級語言編譯到什么程度呢,這又跟編譯的技術有關了,既可以編譯成直接可執行的目標代碼,也可以編譯成一種中間表示,然后拿到不同的機器和系統上去執行,這種情況通常又需要支撐環境,比如解釋器或虛擬機的支持,Java程序編譯成bytecode,再由不同平臺上的虛擬機執行就是很好的例子。所以,說高級語言不依賴于機器,是指在不同的機器或平臺上高級語言的程序本身不變,而通過編譯器編譯得到的目標代碼去適應不同的機器。從這個意義上來說,通過交叉匯編,一些匯編程序也可以獲得不同機器之間的可移植性,但這種途徑獲得的移植性遠遠不如高級語言來的方便和實用性大。

猜你喜歡LIKE
相關推薦HOT
更多>>
什么是 FTP,優缺點是什么?
FTP 代表什么?FTP 是?File Transfer Protocol(文件傳輸協議)的縮寫。下面,我們來分解下這個詞。本質上來說,“協議”(或者說,互聯網協議...詳情>>
2023-10-15 23:19:27
什么是移動云計算?
一、什么是移動云計算移動云計算(MCC)是使用云技術交付移動應用程序的方法。如今,復雜的移動應用程可執行諸如身份驗證、位置感知功能以及為...詳情>>
2023-10-15 20:38:55
kNN里面的兩種優化的數據結構:kd-tree和ball-tree,在算法實現原理上有什么區別?
一、kd-tree和ball-tree在算法實現原理上的區別KD樹是對依次對K維坐標軸,以中值切分構造的樹,每一個節點是一個超矩形,在維數小于20時效率較高...詳情>>
2023-10-15 17:34:35
存儲服務器與普通服務器有什么區別?
一、存儲服務器與普通服務器的區別存儲服務器和普通服務器有以下區別:1、存儲能力不同存儲服務器的主要功能是存儲和管理數據,因此其存儲能力...詳情>>
2023-10-15 15:35:37熱門推薦
技術干貨






