所以我有一个叫做cell的类:
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']
当我从第三个项目中明确删除它时,为什么会从数组的第一项中删除值?
答案 0 :(得分:2)
这是一个常见的Python问题。每次cell
写入的方式都有对同一列表实例的引用。您可以为每个id(mlist[i].possibles)
打印i
来检查这一点。
要创建单独的列表,请将初始化移至构造函数:
def __init__(self, value):
self.possibles = [ "1", "2", "3", "4", "5", "6", "7", "8", "9" ]
答案 1 :(得分:1)
这种情况正在发生,因为您已将possibilities
定义为类变量,而不是实例变量。
将possibilities
移至__init__
(作为self.possibilities
),您应该没问题
答案 2 :(得分:1)
mlist = [cell("2"), cell("6"), cell("8")]
这里没有三个不同的列表,但是对同一个列表有三个引用。任何变化都会影响所有。
答案 3 :(得分:0)
正如其他人所说,你应该做一个实例变量。通过将value参数默认设置为0,您也可以不使用if ... else子句。
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']
>>>