2017-08-27 86 views
1

我只是鍵入了下面的代碼。我期望看到這個輸出:「0.5 - 1.5」。但我看到這個:「1.5 - 1.5」:將自定義類添加到另一個類中的列表

class ponto: 
    x=0 
    y=0 
    z=0 

class estado: 
    pontos = [] 
    prox_bloco = 1 

#Construir Estado Inicial 
p = ponto() 
p.x = 0.5 
p.y = 0.5 
p.z = 0.5 
init = estado() 
init.pontos.append(p) 
p.x = 1.5 
init.pontos.append(p) 

p1 = init.pontos[0] 
p2 = init.pontos[1] 
print(p1.x,"--",p2.x) 

任何人都可以解釋這一點,並幫助我解決它嗎?

回答

1

第一:你應該使用實例變量,而不是類變量:

class ponto: 
    def __init__(self): 
     self.x = 0 
     self.y = 0 
     self.z = 0 

class estado: 
    def __init__(self): 
     self.pontos = [] 
     self.prox_bloco = 1 

二:當你改變p.x你會改變它的情況下,你不創建一個新實例的方式!

相反,你應該創建(例如使用copy.copy or copy.deepcopy),然後改變它的新實例的新實例:

import copy 

p = ponto() 
p.x = 0.5 
p.y = 0.5 
p.z = 0.5 
init = estado() 
init.pontos.append(p) 
p = copy.copy(p)  # copy "p" 
p.x = 1.5    # set the variable on the copy 
init.pontos.append(p) # append the copy 

p1 = init.pontos[0] 
p2 = init.pontos[1] 
print(p1.x,"--",p2.x) 

這給了預期的結果:

0.5 -- 1.5 
相關問題