[英]different behavior of strings and numbers in python when dealing with class and object variables
我發現了一個問題,但無法理解差異的原因:
代碼1:
class Test:
var=2
def __init__(self):
self.var=self.var+1
p=Test()
print "p.var:",p.var
q=Test()
print "q.var:",q.var
輸出1:
p.var:3
q.var:3
為什么不是輸出(根據用於解釋代碼2的概念)
p.var:3
q.var:4
代碼2:
class Test:
var=[]
def __init__(self):
self.var.append("fool")
p=Test()
print "p.var:",p.var
q=Test()
print "q.var:",q.var
輸出2:
p.var: ['fool']
q.var: ['fool', 'fool']
我在Stack Exchange中閱讀了有關code2的文章: python類實例變量和類變量
但無法將code1與以下概念鏈接。請幫助
此處的區別在於列表是可變對象; 整數是不可變的。 當code1遞增self.var時,它必須返回一個新對象3。在第二個調用中,我們從2重新開始,為對象q生成另一個3。
在code2中, var仍然是一個類對象(該類僅一個,每個對象一個)。 當創建p時 ,我們將“ fool”附加到空列表中。 稍后創建q時,我們附加了第二個“傻瓜”。 同時打印它們:
p=Test2()
print "p.var1:",p.var
q=Test2()
print "q.var2:",q.var
print "p.var2:",p.var
輸出:
p.var1: ['fool']
q.var2: ['fool', 'fool']
p.var2: ['fool', 'fool']
這樣可以澄清事情嗎?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.