摘要:,可以對(duì)對(duì)象進(jìn)行自動(dòng)地回收。如下,這種情況的發(fā)生表示隨改變了,應(yīng)該意識(shí)到這個(gè)問題。代表引用相同則返回,否則,返回。這個(gè)判斷會(huì)更加嚴(yán)格。的值為的兩個(gè)量,其必定也是。,和指向了不同的。,由于會(huì)存儲(chǔ)一些小的和小的以方便重新利用。
1, 在Python中,類型永遠(yuǎn)跟隨object,而非variable。Variable沒有類型。
2,在下面的三個(gè)式子中,a首先被賦予整形3,再被賦予字符串‘spam’,后再被賦予float型數(shù)值1.23. 這在Python中是可行的,而在C語言中不行。
>>> a = 3 # It"s an integer >>> a = "spam" # Now it"s a string >>> a = 1.23 # Now it"s a floating point
3,在Python中,variable和object的這種關(guān)系稱為引用(reference):
每一次a被賦予一個(gè)新的值,這個(gè)箭頭就被指向新的object。
4,每一個(gè)object除了有足夠的內(nèi)存空間來存儲(chǔ)它的值,還有2個(gè)標(biāo)題字段(header fields):
A,type designator用來標(biāo)記這個(gè)object的類型
B,reference counter 用來確定是否可以回收這個(gè)object了。
比如,3這個(gè)object內(nèi)的type designator就告訴Python,其類型是integer。
5,Python可以對(duì)對(duì)象進(jìn)行自動(dòng)地回收。這就是reference counter做的事情。如果指向這個(gè)object的reference個(gè)數(shù)為零,這個(gè)object就被立刻回收。所以,程序員無需自己對(duì)其回收。如上面的a,當(dāng)其被從3,指向字符串‘spam’的時(shí)候,如果3沒有在被其他的variable所引用,3這個(gè)object將立即被Python回收。既其reference counter 從 1 降至0.
6,share reference: 如下的代碼表示object 3被a和b同時(shí)引用了:
如果a被重新賦值為‘spam’,則表示a的引用變成新的object,即‘spam’,而b仍然指向3這個(gè)object。這告訴我們,b不是指向a,而是指向object。所有的variable都不是指向variable,而是指向object。
7,share reference and in-place changes.
何為in-place changes ? in-place changes 指的是針對(duì)mutable類型的type,是可以對(duì)其修改內(nèi)容的,包括:dictionary、list、set。改變這種type的某個(gè)位,并不是構(gòu)造一個(gè)新的object,而是修改原先的object。如下,這種情況的發(fā)生表示L2隨L1改變了,programmer應(yīng)該意識(shí)到這個(gè)問題。
>>> L1 = [2, 3, 4] # A mutable object >>> L2 = L1 # Make a reference to the same object >>> L1[0] = 24 # An in-place change >>> L1 # L1 is different [24, 3, 4] >>> L2 # But so is L2! [24, 3, 4]
8,如果不想影響L2,則應(yīng)該將本來的L1復(fù)制一份,在讓L2指向這個(gè)復(fù)制的object。
對(duì)于list,可以用切片的方法復(fù)制以個(gè)新的list。
>>> L1 = [2, 3, 4] >>> L2 = L1[:] # Make a copy of L1 (or list(L1), copy.copy(L1), etc.) >>> L1[0] = 24 >>> L1 [24, 3, 4] >>> L2 # L2 is not changed [2, 3, 4]
而set、dictionary沒有切片的方法,則需要用copy的方法,當(dāng)然,copy同樣適用于list:
import copy X = copy.copy(Y) # Make top-level "shallow" copy of any object Y X = copy.deepcopy(Y) # Make deep copy of any object Y: copy all nested parts
9, == 代表值相同則返回True,否則,返回False。
is代表引用相同則返回True,否則,返回Flase。這個(gè)判斷會(huì)更加嚴(yán)格。is的值為True的兩個(gè)量,其==必定也是True。
>>> L = [1, 2, 3] >>> M = [1, 2, 3] # M and L reference different objects >>> L == M # Same values True >>> L is M # Different objects , L 和M 指向了不同的object。 False
10,由于Python會(huì)存儲(chǔ)一些小的integer和小的string以方便重新利用。故有些時(shí)候,本該被回收的object(小的integer或者小的string)并沒有被及時(shí)地回收,而是仍然存儲(chǔ)在內(nèi)存里。
>>> X = 42 >>> Y = 42 # Should be two different objects >>> X == Y True >>> X is Y # Same object anyhow: caching at work! True
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/38301.html
How Python Runs Programs Process: source code -> compiled byte code -> PVM (Python Virtual Machine) runs byte codePerformance loss: compilation + extra work in running virtual machineImplementation va...
摘要:此時(shí)不要在這里面的右邊加入,否則會(huì)被當(dāng)做。,這個(gè)式子可以將二進(jìn)制數(shù),轉(zhuǎn)換為十進(jìn)制的。需要注意的是,需要加上,表示。下面,表示括號(hào)內(nèi)的第一個(gè)參數(shù),表示第二個(gè)參數(shù)。 1, 字符串的連接concatenate有兩種方式:A:直接寫在一起: >>> title = Meaning of Life # Implicit concatenation >>> title Meaning of L...
摘要:,如何一個(gè)方法一使用方法二使用方法方法三使用方法,按升序或降序排列表示升序表示降序和會(huì)返回。而僅能刪除一個(gè)。使用方法可以避免這樣的錯(cuò)誤導(dǎo)致程序出現(xiàn)。,在中,的方法返回的不再是。不過可以使用強(qiáng)迫它們組成一個(gè)。 Chapter 8 Lists and Dictionaries1, list的concatenation 和 repetition 操作: >>> [1, 2, 3] + [4,...
摘要:,可以用十進(jìn)制十六進(jìn)制八進(jìn)制二進(jìn)制來表示。由實(shí)數(shù)虛數(shù)組成。,在中,八進(jìn)制可以以開頭,但是在中,不能以開頭,一定要以或者開頭,位的運(yùn)算表示位向左移動(dòng)表示位向右移動(dòng)表示或運(yùn)算表示運(yùn)算表示異或運(yùn)算兩者不同為,相同為可以用方法計(jì)算二進(jìn)制數(shù)有多少位。 1, 在Python 2.x 中。Python的integer,有兩種類型,normal和long。Normal通常是32位的。Long表示無限精...
摘要:可以連接,可以重復(fù)可以將兩個(gè)連接在一起可以重復(fù)任意次數(shù)如中,號(hào)作用于表示連接,而作用于數(shù)字表示加法,操作符的作用會(huì)根據(jù)其作用的對(duì)象而有所適應(yīng)。中的對(duì)象被分類為和。針對(duì)的核心類型,數(shù)字字符串和都是的。 1, >>> len(str(3)) 結(jié)果是1,len不能對(duì)數(shù)字求值,需要先將數(shù)字轉(zhuǎn)換為str 2, math模塊中,有許多工具可以用來計(jì)算數(shù)學(xué)問題。使用math模塊,先導(dǎo)入math: i...
閱讀 2847·2021-11-22 15:22
閱讀 19015·2021-09-22 15:00
閱讀 1433·2021-09-07 09:58
閱讀 1236·2019-08-30 13:01
閱讀 2408·2019-08-29 16:27
閱讀 2344·2019-08-26 13:25
閱讀 1618·2019-08-26 12:13
閱讀 934·2019-08-26 11:53