2017-08-27 88 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 
相关问题