我刚输入以下代码。我希望看到这个输出:“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)
任何人都可以解释这个并帮我修复它吗?
答案 0 :(得分: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