python中賦值與c語言區別?先來看看簡單的Python 程式碼在記憶體中是什麼樣子的:
b = 3 b = b + 5
它在記憶體中的操作示意圖是這樣的:
然而,從程式碼的的字面意思來看,「把3 賦給b,把b 加5 之後再賦給b。」
也就是把程式碼看成這個樣子:
b ← 3 b ← b + 5
所以下面這張在記憶體中的操作圖可能更符合我們的直覺:
也也就是b 5 的值再寫回b 中。典型的 C 程式就是這樣的。為變數 b 分配一個 int 型的記憶體單元,然後將整數 3 存放在該記憶體單元中。 b 就代表了這個區塊記憶體空間,不再移動,可以更新 b 的值,但 b 在記憶體中的位址就不再改變了。所以我們說 b = b 5,就等於 b ← b 5,把 b 的值加 5 之後仍會放入 b 中。變數 b 和它所在記憶體空間緊緊綁定在一起。
相關推薦:《Python影片教學》
而再看看上面Python 中的記憶體示意圖,b 5 得到了一個新值,然後令b 指向了這個新值。換句話說,它所做的是事情是這樣的:
b → 3 b → b + 5
先令 b 指向 3,再令 b 指向 b 5 這個新值。
C 程式更新的是記憶體單元中存放的值,而 Python 更新的是變數的指向。
C 程式中變數保存了一個值,而 Python 中的變數指向一個值。
如果說C 程式是透過操縱記憶體位址而間接操作資料(每個變數固定對應一個記憶體位址,所以說操縱變數就是操縱記憶體位址),資料處於被動地位,那麼Python 就是直接操縱數據,數據處於主動地位,變數只是作為一種引用關係而存在,而不再擁有儲存功能。
在 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 程式為每個變數都分配一個了固定的記憶體位址,這保證了 C 變數之間的獨立性。
C 語言是變數(也即記憶體位址)之間的交互,Python 是物件(資料)之間的交互。這是兩種不同的互動方式。
以上是python中賦值與c語言區別的詳細內容。更多資訊請關注PHP中文網其他相關文章!