2 回答

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

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