问题,两个对象之间共享非静态/非全局变量?

2024-09-27 22:33:17 发布

您现在位置:Python中文网/ 问答频道 /正文

两个对象似乎共享同一个非静态/非全局变量,我不清楚这是怎么可能的,请参见下文:

class Pop:
    def __init__(self):
        self.n = 2
        self.w = [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0]
        self.w_min = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
        self.w_max = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]

    def populate(self, __run):
        for i in range(self.n):
            self.varients.append(Varient(self))
            for x in range(len(self.varients[i].w)):
                self.varients[i].w[x] = randint(self.varients[i].w_min[x] * 100,
                                                        self.varients[i].w_max[x] * 100) / 100
                    else:
                        self.varients[i].w[x] = randint(self.varients[i].w_min[x] * 100,
                                                        self.varients[i].w_max[x] * 100) / 100
            print(self.varients[i].w)
        print(self.varients[0].w)
        print(self.varients[1].w)
        for x in range(len(self.varients[1].w)):
            self.varients[1].w[x] = 1
        print(self.varients[0].w)
        print(self.varients[1].w)


class Varient(Pop):
    def __init__(self, parent):
        super().__init__()

        self.w = parent.w
        self.w_min = parent.w_min
        self.w_max = parent.w_max

这是我看到的输出:

[1.0, 1.0, 0.86, 0.685, 0.925, 0.735, 0.35, 0.825, 0.31, 0.62, 0.71, 0.88]
[1.0, 1.0, 0.565, 0.575, 0.95, 0.405, 0.605, 0.48, 0.42, 0.445, 0.745, 0.41]
[1.0, 1.0, 0.565, 0.575, 0.95, 0.405, 0.605, 0.48, 0.42, 0.445, 0.745, 0.41]
[1.0, 1.0, 0.565, 0.575, 0.95, 0.405, 0.605, 0.48, 0.42, 0.445, 0.745, 0.41]
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]

当我更改对象“self.varients[1]”的“w”值时,它会以某种方式更改“self.varients[0]”的值。如果我在周围传球,这对我来说是有意义的,但我不明白为什么会发生这种情况


Tags: 对象inselfforinitdefrangemin

热门问题