Python函数会意外地更改数组吗?

时间:2019-06-01 21:37:13

标签: python arrays function

我有一个python脚本,该脚本具有应更改数组值的功能。当我直接调用该函数时,它可以正常工作,但是在外部调用时,它只是擦除数组。

附加到特定类的函数;并从另一个班级被调用。我尝试重写代码,但仍然会给出错误。

我尝试过的第一件事:

class Cell:
    def __init__(self):
         self.candidates = [1, 2, 3, 4, 5, 6, 7, 8, 9]
    def remove_candidate(self, value):
         try:
             self.candidates.remove(value)
         except:
             pass

class Grid:
    def __init__(self):
         self.a = Cell()
         self.b = Cell()
         self.c = Cell()
    def remove_candidate(self, value):
         for current_cell in [self.a, self.b, self.c]:
              current_cell.remove_candidate(value)

然后我尝试将第一个重写为:

class Cell:
    def __init__(self):
         self.candidates = [1, 2, 3, 4, 5, 6, 7, 8, 9]
    def remove_candidate(self, value):
         new_candidates = []
         for i in self.candidates:
             if i != value:
                new_candidates.append(i)
         self.candidates = new_candidates

对于这两个版本的代码,如果我在单元格中调用该代码,都可以得到预期的结果;从候选数组中删除了单个值。但是,如果我从Grid类中调用它,它将删除数组中的所有值,而不仅仅是一个。

例如: a = Cell() a.remove_candidate(3) 导致两种版本的代码都a.candidates数组按预期变成[1,2,4,5,6,7,8,9]

G = Grid() G.remove_candidates(3) 导致G.a.candidates数组为[],这是错误的。

有什么主意为什么直接调用remove_candidate方法有效,但尝试从Grid类调用却失败了?

0 个答案:

没有答案