0

所以我有一个叫做单元格的类:

class cell:
    possibles = [ "1", "2", "3", "4", "5", "6", "7", "8", "9" ]
    value = None;

    def __init__(self, value):
        if value == "":
            self.value = "0"
        else:
            self.value = value

if __name__=="__main__":
    mlist = [cell("2"), cell("6"), cell("8")]
    mlist[2].possibles.remove("3")
    print mlist[0].possibles

输出是:

['1', '2', '4', '5', '6', '7', '8', '9']

当我从第三项中显式删除它时,为什么它会从数组第一项中的可能值中删除它?

4

4 回答 4

2

这是一个常见的 Python 问题。这种写法每个cell都有对同一个列表实例的引用。您可以通过打印id(mlist[i].possibles)每个i.

要创建单独的列表,请将初始化移动到构造函数:

def __init__(self, value):
    self.possibles = [ "1", "2", "3", "4", "5", "6", "7", "8", "9" ]
于 2012-10-16T01:12:24.637 回答
1

发生这种情况是因为您已定义possibilities为类变量,而不是实例变量。

进入(as ) possibilities,你应该没问题__init__self.possibilities

于 2012-10-16T01:11:50.430 回答
1
mlist = [cell("2"), cell("6"), cell("8")]

在这里,您没有三个不同的列表,而是对同一个列表的三个引用。任何变化都会影响所有人。

于 2012-10-16T01:16:55.437 回答
0

正如其他人所说,您应该使实例变量成为可能。你也可以不使用 if...else 子句,将 value 参数设置为默认值 0。

    class cell:
        def __init__(self, value=0):
            self.possibles = [ "1", "2", "3", "4", "5", "6", "7", "8", "9" ]
            self.value = value

    if __name__=="__main__":
        mlist = [cell("2"), cell("6"), cell("8")]
        mlist[2].possibles.remove("3")


>>> mlist[0].possibles
['1', '2', '3', '4', '5', '6', '7', '8', '9']
>>> mlist[2].possibles
['1', '2', '4', '5', '6', '7', '8', '9']
>>> 
于 2012-10-16T01:23:02.690 回答