2 回答

TA貢獻(xiàn)12條經(jīng)驗(yàn) 獲得超18個(gè)贊
當(dāng)對象被創(chuàng)建并賦值或引用給n個(gè)變量時(shí)(n為正整數(shù)),該對象的引用計(jì)數(shù)就為n。例:
x = 3.14? #創(chuàng)建浮點(diǎn)型對象3.14并指向變量x,即引用計(jì)數(shù)為1
y = x??????? #創(chuàng)建浮點(diǎn)型對象3.14的別名為變量y,引用計(jì)數(shù)+1,即為2。
總之,對象的引用計(jì)數(shù)增加有以下幾種情況:
對象被創(chuàng)建:x = 3.14
對象別名被創(chuàng)建:y = x
作為參數(shù)傳遞給函數(shù):round(x)
成為容器對象的元素:mylist = [1 , x , ' abc ']
當(dāng)引用計(jì)數(shù)為為0時(shí),對象將被回收
---------------------------------------------------------
a = "中文編程" ? #結(jié)合上面所述,創(chuàng)建了字符串對象并指向變量a, 即引用計(jì)數(shù)為1

TA貢獻(xiàn)165條經(jīng)驗(yàn) 獲得超90個(gè)贊
六.已知如下代碼________
a?=?"中文編程" b?=?a c?=?a a?=?"python編程" b?=?u'%s'?%a d?=?"中文編程" e?=?a c?=?b b2?=?a.replace("中","中")
請給出str對象"中文編程"的引用計(jì)數(shù)
請給出str對象"python編程"的引用計(jì)數(shù)
這個(gè)是 題主的問題的完整版吧?
這就要說到 Python 的變量存儲機(jī)制了, 一般來說,Python 的變量名 和變量值 被形容為 “標(biāo)簽式”: 變量名是標(biāo)簽,變量值是 一個(gè)貼著某些(個(gè))標(biāo)簽的物體, 比如上面的代碼中的?? 字符串對象 “中文編程” 就是變量值,也就是 物體。
#第一次賦值給a,?那么就是在?“中文編程”上貼了一個(gè)標(biāo)簽?“a”。 #后面的?b=a,?則是在?“中文編程”上又貼了一個(gè)標(biāo)簽b。 #c?=?a?,?同理,省略。 #a?=?"python編程"?這句?就是將a標(biāo)簽從"中文編程"?上撕了下來,貼到了"python編程"上,但是注意?b,?c?任然 #?貼在?"中文編程"上。 #?b?=?u'%s'?%a,此處?標(biāo)簽b也從"中文編程"上撕了下來,貼到了?"python編程"上面,?這個(gè)需要用?內(nèi)置函數(shù)?id#?來驗(yàn)證。 #?d?=?"中文編程"?,?這一句比較有迷惑性,看著像是在"中文編程"?這個(gè)物體上?又貼了一個(gè)標(biāo)簽d,?但是實(shí)際上是,#?重新建立了一個(gè)"中文編程"?,并且貼了一個(gè)標(biāo)簽d. #?e?=?a,?沒什么可解釋的,?貼標(biāo)簽。 #?c?=?b,?同上。 #?b2?=?a.replace("中","中"),?需要說明,?這一句?等同于?b2?=?a。
恩, 至于問題 留著題主自己數(shù)數(shù)吧, 原理基本上就是這樣了。有什么不對的地方,歡迎大家指正。
另外,有一點(diǎn)需要說明, 在 上面解釋中 , 我們說 a = "中文編程",d = "中文編程", 是 新建對象,并且貼標(biāo)簽, 也就是說
變量a 和變量d 不是指向同一個(gè)對象, 但是 對于一些比較小的整數(shù)(Python3.x 中是 -5 到 256) 則是直接貼標(biāo)簽, 而沒有新建int對象.
添加回答
舉報(bào)