2010-05-19 114 views
4

我對python的類變量有一些疑問。根據我的理解,如果我定義一個聲明在__init__()函數之外的類變量,則該變量在C++中將只創建一次作爲靜態變量。Python類變量問題

對於一些python類型,例如字典和列表類型,這似乎是正確的,但對於那些基本類型,例如, int,float,是不一樣的。

例如:

class A: 
    dict1={} 
    list1=list() 
    int1=3 

    def add_stuff(self, k, v): 
     self.dict1[k]=v 
     self.list1.append(k) 
     self.int1=k 

    def print_stuff(self): 
     print self.dict1,self.list1,self.int1 

a1 = A() 
a1.add_stuff(1, 2) 
a1.print_stuff() 
a2=A() 
a2.print_stuff() 

輸出是:

{1: 2} [1] 1 
{1: 2} [1] 3 

我明白dict1和列表1的結果,但爲什麼INT1的行爲有什麼不同?

+0

self.int1 =東西改變參考 – 2010-05-19 12:56:08

回答

6

不同的是,你永遠不會分配給self.dict1self.list1 —你只讀過從類—這些字段,而你分配給self.int1,從而創建一個隱藏的類領域的實例字段。