摘要:每個對象均有標(biāo)識符類型值。通常我們認(rèn)為當(dāng)這些對象被垃圾回收機(jī)制回收時,它占用的外部資源即被釋放。造物主類型對象的類型幾乎影響了該對象的所有功能,在某種程度上,對象的標(biāo)識符也受其類型的影響。
原文地址
對象對象(Objects)是python中數(shù)據(jù)的抽象,python中所有的數(shù)據(jù)均可以用對象或者是對象之間的關(guān)系來表示。每個對象均有標(biāo)識符(identity)、類型(type)、值(value)。
標(biāo)識符。對象一旦創(chuàng)建,那么它的標(biāo)識符就不會改變,可以把標(biāo)識符看作對象在內(nèi)存中的地址。_is_ 操作可以用來比較兩個對象的標(biāo)識符,函數(shù)_id()_用來返回對象標(biāo)識符(python中返回對象在內(nèi)存中的地址)。
類型。對象的類型也是不可變的,對象的類型決定了該對象支持的操作,另外也決定了該對象可能的值。_type()_函數(shù)返回一個對象的類型。
值。一些對象的值可以改變,我們叫它可變對象,字典和列表均屬于可變對象;值不可改變的對象我們叫它不可變對象,數(shù)字、字符串、元組均屬于不可變對象。
python不像C那樣需要顯式地回收對象占用的空間,python內(nèi)核中有垃圾回收機(jī)制,當(dāng)一個對象不可達(dá)時,就會交由垃圾回收機(jī)制處理。
一些對象引用了一些外部資源,例如打開的文件或者窗口。通常我們認(rèn)為當(dāng)這些對象被垃圾回收機(jī)制回收時,它占用的外部資源即被釋放。但是,垃圾回收機(jī)制并不一定會回收這些對象,因此這些對象提供了顯式的方法(通常是_close()_)用來釋放外部資源。程序中最好使用顯式的方法來釋放外部資源,一般可以使用 try...finally 方便地釋放。
造物主:類型!對象的類型幾乎影響了該對象的所有功能,在某種程度上,對象的標(biāo)識符也受其類型的影響。
先看下面的程序:
>>> sum = 15 >>> sum_add = 12 + 3 >>> sum is sum_add True >>> sum = 15000000 >>> sum_add = 10000000 + 5000000 >>> sum is sum_add False >>> sum_add == sum True
對于不可變對象(這里是int),當(dāng)我們需要一個新的對象(sum_add = 12 + 3)時,python可能會返回已經(jīng)存在的某個類型和值都一致的對象(sum)的引用。當(dāng)然,這里只是可能會返回已經(jīng)存在的對象,要看python的具體實現(xiàn)。同樣是創(chuàng)建新的對象sum_add = 10000000 + 5000000,python并沒有把值和類型都一樣的sum返回給sum_add。
>>> value = [] >>> value_1 = [] >>> value is value_1 False >>> value == value True >>> value = value_1 = [] >>> value is value_1 True
對于可變對象,當(dāng)我們需要新的對象時,python一定會為我們新建一個。注意,這里value = value_1 = []將會創(chuàng)建一個空的列表對象,然后同時返回給value和value_1。
撲朔迷離的不可變對象首先看下面的代碼:
>>> mutability = [1, 2, 3, 4] >>> immutability = (0, mutability, 5) >>> immutability (0, [1, 2, 3, 4], 5) >>> mutability[2] = "see here!" >>> immutability (0, [1, 2, "see here!", 4], 5)
這里元組immutability中一個元素為可變對象列表mutability,當(dāng)我們改變mutability的值時,號稱不可變對象的元組的值竟然發(fā)生了變化。這又是為什么呢?
回答這個問題前,先總結(jié)下上面這段代碼發(fā)生了什么:不可變對象A包含了一個對可變對象B的引用,可變對象B的值發(fā)生改變時,A的值也會發(fā)生改變。
那么,為什么我們?nèi)哉J(rèn)為A是不可變對象呢?因為A仍然包含對象B,而B的標(biāo)識符并沒有發(fā)生變化,也就是說A的所有元素的標(biāo)識符并沒有發(fā)生變化。其實嚴(yán)格來講,不可變對象的值是可以改變的,這里是很微妙的哦,需要好好品味。看下面的代碼吧:
>>> mutability = [1, 2, 3, 4] >>> id(mutability) 4394446720 >>> immutability = (0, mutability, 5) >>> id(immutability[1]) 4394446720 >>> mutability[2] = "see here!" >>> id(mutability) 4394446720 >>> id(immutability[1]) 4394446720
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/45283.html
??前面的話?? 大家好!這是Java基礎(chǔ)知識與數(shù)據(jù)結(jié)構(gòu)博文的導(dǎo)航帖,收藏我!學(xué)習(xí)Java不迷路! ?博客主頁:未見花聞的博客主頁 ?歡迎關(guān)注?點贊?收藏??留言? ?本文由未見花聞原創(chuàng),CSDN首發(fā)! ?首發(fā)時間:?2021年11月11日? ??堅持和努力一定能換來詩與遠(yuǎn)方! ?參考書籍:?《Java核心技術(shù)卷1》,?《Java核心技術(shù)卷2》,?《Java編程思想》 ?參考在線編程網(wǎng)站:?牛...
摘要:數(shù)字世界的演化需要萬物有靈,萬物有靈就需要有支配萬物思想行為活動的大腦,這個是數(shù)字世界中萬物之個體能夠成長并形成獨立物格的基礎(chǔ)。 ????????上帝說:要有光!于是,就有了光。在無限光芒的照耀下,我們物理世界開始進(jìn)行演化,然后有了生物的產(chǎn)生和人類文明的誕生和發(fā)展。這西方圣經(jīng)的創(chuàng)世篇,就如我...
摘要:各企業(yè)機(jī)構(gòu)目前普遍有一個新的需求,即跨廣域網(wǎng)使用云功能,并在網(wǎng)絡(luò)邊緣進(jìn)行微小化部署。認(rèn)為,邊緣計算描述的是一種計算拓?fù)洹? 最近,有越來越多的公司開始使用跨多個站點和網(wǎng)絡(luò)的分布式基礎(chǔ)設(shè)施,以實現(xiàn)云計算體系結(jié)構(gòu)的簡化管理和靈活性。各企業(yè)機(jī)構(gòu)目前普遍有一個新的需求,即跨廣域網(wǎng)使用云功能,并在網(wǎng)絡(luò)邊緣進(jìn)行微小化部署。盡管這樣的運營模式還處于早期階段,但許多新出現(xiàn)的用例和場景將從這樣的分布式基礎(chǔ)...
閱讀 1574·2021-09-23 11:21
閱讀 2345·2021-09-07 10:13
閱讀 834·2021-09-02 10:19
閱讀 1125·2019-08-30 15:44
閱讀 1720·2019-08-30 13:18
閱讀 1913·2019-08-30 11:15
閱讀 1105·2019-08-29 17:17
閱讀 2017·2019-08-29 15:31