數據模型==對象模型
Python官方文檔說(shuō)法是“Python數據模型”,大多數Python書(shū)籍作者說(shuō)法是“Python對象模型”,它們是一個(gè)意思,表示“計算機編程語(yǔ)言中對象的屬性”。這句話(huà)有點(diǎn)抽象,只要知道對象是Python對數據的抽象,在Python中萬(wàn)物皆對象就可以了。
官方文檔嚴謹說(shuō)法,Python程序中的所有數據都是用對象或對象之間的關(guān)系來(lái)表示的。 對象三要素對象有三個(gè)要素:編號(identity)、類(lèi)型(type)、值(value)。identity編號就是對象的內存地址,從創(chuàng )建后就不會(huì )改變。is運算符用來(lái)比較2個(gè)對象的編號。id()函數返回對象編號的整數表示。
identity也可以翻譯為身份,對象身份。type類(lèi)型決定了可以對對象做哪些操作,也定義了對象的可能值,比如int和bool類(lèi)型的值就不一樣。type()函數返回對象類(lèi)型。很多人會(huì )誤以為Python是弱類(lèi)型語(yǔ)言,其實(shí)Python是強類(lèi)型語(yǔ)言,這個(gè)誤解的真實(shí)原因是,Python不需要編譯,不需要提前知道變量的類(lèi)型,在運行時(shí)才檢查類(lèi)型,這應該叫做動(dòng)態(tài)語(yǔ)言。
JavaScript是弱類(lèi)型語(yǔ)言,在Python中1+"2"會(huì )運行失敗,在JavaScript中能運行成功。類(lèi)型在創(chuàng )建后也不會(huì )改變,雖然可以進(jìn)行類(lèi)型轉換,但轉換實(shí)際會(huì )產(chǎn)生新對象:
a = 1 print(id(a)) print(id(str(a))) print(id(a))結果為:
140715000207008 2136059506160 140715000207008value對象三要素中唯一能改變的就只有值了。官網(wǎng)有一句正確的廢話(huà):允許改變值的對象是mutable(可變的),不允許改變值的對象是immutable(不可變的)。它的意義在于當不可變對象的值是對可變對象的引用時(shí),該如何判斷對象的可變性?結論是不可變對象仍然是不可變的,因為這個(gè)引用是不能變的,但是我們通常會(huì )認為這個(gè)不可變對象的值是可變的,尤其是對象容器。對象類(lèi)型也會(huì )決定是否可變,比如numbers、strings、tuples是不可變的,dictionaries、lists是可變的。
對象容器有些對象包含了對其他對象的引用,這叫做containers對象容器,比如tuples、lists、dictionaries。大多數情況下,我們說(shuō)容器的值,說(shuō)的是引用的對象的值,而不是引用編號。但討論容器可變性時(shí),則僅僅是指容器直接包含的引用編號。比如tuple是不可變的,如果它包含了對一個(gè)可變對象的引用后,當該可變對象改變時(shí)容器的值也會(huì )改變。
對象回收對象不會(huì )被顯式銷(xiāo)毀,但是它們會(huì )被當做垃圾回收,只要不存在對象引用,這就是Python垃圾回收機制!垃圾回收機制比較復雜,比如循環(huán)引用,實(shí)際上已經(jīng)沒(méi)有使用了,但是還存在引用等,涉及到算法規則,等寫(xiě)完P(guān)ython進(jìn)階,在寫(xiě)Python原理時(shí)做進(jìn)一步研究。Python垃圾回收機制不是銀彈,不能解決所有問(wèn)題,所以在引用外部資源,比如打開(kāi)文件后,我們需要注意顯式close,防止資源始終占用內存,無(wú)法釋放,造成內存泄漏。close除了手動(dòng)調用close()方法外,也可以使用with來(lái)自動(dòng)close。
使用try...except可能會(huì )讓對象繼續存活。 類(lèi)型決定一切對象的類(lèi)型幾乎決定了對象的一切行為,甚至是對象編號,比如對于不可變類(lèi)型:
a = 1 b = 1a和b可能會(huì )指向同一個(gè)值為1的對象,也可能會(huì )指向兩個(gè)不同的值為1的對象,這取決于具體實(shí)現。但是對于可變類(lèi)型:
c = [] d = []c和d一定會(huì )指向兩個(gè)不同的單獨的空列表。
注意c = d = []?則是將同一個(gè)對象賦值給?c?和?d。 小結Python數據模型就是常說(shuō)的對象模型,萬(wàn)物皆對象,有編號、類(lèi)型、值三個(gè)要素。了解了對象模型后,Python另一個(gè)重要概念即將浮出水面,它就是數據結構。https://mp.weixin.qq.com/s/ATM0TnBU3HqRV2WjGs-Lhw
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng )、來(lái)自本網(wǎng)站內容采集于網(wǎng)絡(luò )互聯(lián)網(wǎng)轉載等其它媒體和分享為主,內容觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如侵犯了原作者的版權,請告知一經(jīng)查實(shí),將立刻刪除涉嫌侵權內容,聯(lián)系我們QQ:712375056,同時(shí)歡迎投稿傳遞力量。
Copyright ? 2009-2022 56dr.com. All Rights Reserved. 特網(wǎng)科技 特網(wǎng)云 版權所有 特網(wǎng)科技 粵ICP備16109289號
域名注冊服務(wù)機構:阿里云計算有限公司(萬(wàn)網(wǎng)) 域名服務(wù)機構:煙臺帝思普網(wǎng)絡(luò )科技有限公司(DNSPod) CDN服務(wù):阿里云計算有限公司 百度云 中國互聯(lián)網(wǎng)舉報中心 增值電信業(yè)務(wù)經(jīng)營(yíng)許可證B2
建議您使用Chrome、Firefox、Edge、IE10及以上版本和360等主流瀏覽器瀏覽本網(wǎng)站