這期內(nèi)容當(dāng)中小編將會(huì)給大家?guī)碛嘘P(guān)Python數(shù)據(jù)模型與對象模型的區(qū)別是什么,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
十余年的沙河網(wǎng)站建設(shè)經(jīng)驗(yàn),針對設(shè)計(jì)、前端、開發(fā)、售后、文案、推廣等六對一服務(wù),響應(yīng)快,48小時(shí)及時(shí)工作處理。營銷型網(wǎng)站的優(yōu)勢是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動(dòng)調(diào)整沙河建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計(jì),從而大程度地提升瀏覽體驗(yàn)。創(chuàng)新互聯(lián)建站從事“沙河網(wǎng)站設(shè)計(jì)”,“沙河網(wǎng)站推廣”以來,每個(gè)客戶項(xiàng)目都認(rèn)真落實(shí)執(zhí)行。
數(shù)據(jù)模型==對象模型
Python官方文檔說法是“Python數(shù)據(jù)模型”,大多數(shù)Python書籍作者說法是“Python對象模型”,它們是一個(gè)意思,表示“計(jì)算機(jī)編程語言中對象的屬性”。這句話有點(diǎn)抽象,只要知道對象是Python對數(shù)據(jù)的抽象,在Python中萬物皆對象就可以了。
官方文檔嚴(yán)謹(jǐn)說法,Python程序中的所有數(shù)據(jù)都是用對象或?qū)ο笾g的關(guān)系來表示的。
對象三要素
對象有三個(gè)要素:編號(identity)、類型(type)、值(value)。
identity
編號就是對象的內(nèi)存地址,從創(chuàng)建后就不會(huì)改變。is運(yùn)算符用來比較2個(gè)對象的編號。id()函數(shù)返回對象編號的整數(shù)表示。
identity也可以翻譯為身份,對象身份。
type
類型決定了可以對對象做哪些操作,也定義了對象的可能值,比如int和bool類型的值就不一樣。type()函數(shù)返回對象類型。很多人會(huì)誤以為Python是弱類型語言,其實(shí)Python是強(qiáng)類型語言,這個(gè)誤解的真實(shí)原因是,Python不需要編譯,不需要提前知道變量的類型,在運(yùn)行時(shí)才檢查類型,這應(yīng)該叫做動(dòng)態(tài)語言。
JavaScript是弱類型語言,在Python中1+"2"會(huì)運(yùn)行失敗,在JavaScript中能運(yùn)行成功。
類型在創(chuàng)建后也不會(huì)改變,雖然可以進(jìn)行類型轉(zhuǎn)換,但轉(zhuǎn)換實(shí)際會(huì)產(chǎn)生新對象:
a = 1 print(id(a)) print(id(str(a))) print(id(a))
結(jié)果為:
140715000207008 2136059506160 140715000207008
value
對象三要素中唯一能改變的就只有值了。官網(wǎng)有一句正確的廢話:允許改變值的對象是mutable(可變的),不允許改變值的對象是immutable(不可變的)。它的意義在于當(dāng)不可變對象的值是對可變對象的引用時(shí),該如何判斷對象的可變性?結(jié)論是不可變對象仍然是不可變的,因?yàn)檫@個(gè)引用是不能變的,但是我們通常會(huì)認(rèn)為這個(gè)不可變對象的值是可變的,尤其是對象容器。對象類型也會(huì)決定是否可變,比如numbers、strings、tuples是不可變的,dictionaries、lists是可變的。
對象容器
有些對象包含了對其他對象的引用,這叫做containers對象容器,比如tuples、lists、dictionaries。大多數(shù)情況下,我們說容器的值,說的是引用的對象的值,而不是引用編號。但討論容器可變性時(shí),則僅僅是指容器直接包含的引用編號。比如tuple是不可變的,如果它包含了對一個(gè)可變對象的引用后,當(dāng)該可變對象改變時(shí)容器的值也會(huì)改變。
對象回收
對象不會(huì)被顯式銷毀,但是它們會(huì)被當(dāng)做垃圾回收,只要不存在對象引用,這就是Python垃圾回收機(jī)制!垃圾回收機(jī)制比較復(fù)雜,比如循環(huán)引用,實(shí)際上已經(jīng)沒有使用了,但是還存在引用等,涉及到算法規(guī)則,等寫完P(guān)ython進(jìn)階,在寫Python原理時(shí)做進(jìn)一步研究。
Python垃圾回收機(jī)制不是銀彈,不能解決所有問題,所以在引用外部資源,比如打開文件后,我們需要注意顯式close,防止資源始終占用內(nèi)存,無法釋放,造成內(nèi)存泄漏。close除了手動(dòng)調(diào)用close()方法外,也可以使用with來自動(dòng)close。
使用try...except可能會(huì)讓對象繼續(xù)存活。
類型決定一切
對象的類型幾乎決定了對象的一切行為,甚至是對象編號,比如對于不可變類型:
a = 1 b = 1
a和b可能會(huì)指向同一個(gè)值為1的對象,也可能會(huì)指向兩個(gè)不同的值為1的對象,這取決于具體實(shí)現(xiàn)。
但是對于可變類型:
c = [] d = []
c和d一定會(huì)指向兩個(gè)不同的單獨(dú)的空列表。
注意c = d = [] 則是將同一個(gè)對象賦值給 c 和 d。
上述就是小編為大家分享的Python數(shù)據(jù)模型與對象模型的區(qū)別是什么了,如果剛好有類似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。