我的程序有问题。当我尝试更改对象值(在列表中)时,我更改了该列表中的所有对象值 我的代码:
class obj:
def __init__(self, x, y):
self.x = x
self.y = y
def mirrorise(self, mirror):
self.mirror = mirror
if self.mirror.type == 'teleporterx':
self.x -= (self.x-(self.mirror.x+self.mirror.x1/2))*2
class person(obj):
def __init__(self, x, y):
self.x = x
self.y = y
self.pos = [obj(self.x, self.y)]
def mirrored(self, mirrors):
self.count = 0
self.mirrors = mirrors
self.mens = 0
for men in self.pos:
self.mens += 1
for mirror in self.mirrors:
if self.count == 1:
for men in range(self.mens):
self.pos.append(self.pos[men])
self.count = 1
self.count = 0
for men in self.pos:
men.mirrorise(self.mirrors[self.count])
self.count += 1
if self.mirrors[self.count-1] == self.mirrors[-1]:
self.count = 0
class mirror:
def __init__(self, x, y, x1, y1, type):
self.x = x
self.y = y
self.x1 = x1
self.y1 = y1
self.type = type
在代码中,我调用person
名为I的对象和名为mirror
的{{1}}个对象以及mirr
类型mirr2
。我写的时候:
teleportx
它会更改I.mirrored([mirr, mirr2])
中所有对象的x
。如果我写
I.pos
它仍会更改所有I.pos[3].mirrorise(mirr)
。即使我写道:
x
它会更改所有值。那么,它是一些Python规则还是我有错误?
答案 0 :(得分:1)
您正在添加对原始obj()
个实例的引用:
self.pos.append(self.pos[men])
那不是副本;这只是对同一个对象的另一个引用。
创建新 obj()
实例:
self.pos.append(obj(self.pos[men].x, self.pos[men].y))