2016-01-22 29 views
0

我運行下面的python代碼。關於python的內存分配

class A(): 
    def __init__(self,l=[]): 
     self.k = l 
    a = A() 
    b = A() 
    a.k.append(5) 
    print id(a.k) == id(b.k) 
    print b.k 

結果是:

True 
[5] 

我不知道爲什麼 A.K和b.k具有相同的內存地址。

+0

完全刪除多餘'K = 1'並重新格式化它外觀漂亮,但大多時候是這樣它會編譯:-)請爲任何你相信的神的愛,考慮移動到Python3 - 它*更好。 – paxdiablo

回答

2

因爲你分配給l是空的列表中創建一次當功能defined不是函數被調用各一次。

因此l兩個類將指向同一列表,並因此改變一個會改變其他(或者,更正確地,改變一個將改變只有一個)。

如果你想確保類的每個對象都將獲得其自己列表,只需使用切片方法:

self.k = l[:]