Python类列表问题
我遇到了一些Python的问题。我有一个列表,其中有一个类的七个副本,我打算只更改其中一个类的值,但每当我这样做时,所有类的值都会更改 下面是课堂:Python类列表问题,python,list,class,Python,List,Class,我遇到了一些Python的问题。我有一个列表,其中有一个类的七个副本,我打算只更改其中一个类的值,但每当我这样做时,所有类的值都会更改 下面是课堂: class Node: previous = -1 distFromSrc = 1000000 visited = False 下面是我创建列表的方式: def createNodeTable(network): nodeTable = [] for line in network: nodeTable.append(
class Node:
previous = -1
distFromSrc = 1000000
visited = False
下面是我创建列表的方式:
def createNodeTable(network):
nodeTable = []
for line in network:
nodeTable.append(Node)
return nodeTable
“network”是一个长度为7的列表,因此在我尝试对值进行任何更改之前,当我打印“nodeTable[x].visted”时,每个值都会显示为“False”
但是,如果我调用以下函数,“.visited”的所有值都将更改为false,而不仅仅是我要更改的值
无论“currentNode”更改为什么,我都会遇到相同的问题:
def setVisited(currentNode, nodeTable):
nodeTable[currentNode].visited = True
return nodeTable
setVisited函数是否存在问题,或者是否与nodeTable有关?我甚至不知道从哪里开始尝试解决这个问题。在这段代码中,您在每次迭代中都添加了完全相同的对象,类
节点
:
def createNodeTable(network):
nodeTable = []
for line in network:
nodeTable.append(Node)
return nodeTable
因为它是完全相同的对象,更改它会更改它
我们假定您想用nodeTable.append(Node())
替换nodeTable.append(Node())
当您使用时,切换到新样式的类(假设这是Python2)
顺便说一句,您可以这样做:
def createNodeTable(network):
return [Node() for line in network]
问题就在这一行。您要做的是将类型(或类)附加到列表中。因此,最终得到的列表是完全相同类型引用的七倍
您应该做的是创建所述类型的实例。你可以打电话给它
nodeTable.append(Node())
不应该
def createNodeTable(network):
nodeTable = []
for line in network:
nodeTable.append(Node)
return nodeTable
是:
您希望将7个不同的实例附加到nodeTable,而不是同一个类对象7次。正如其他人所说,在此处列出
节点的实例可能更有意义。如果您确实想要一个单独类的列表,可以使用类工厂:
def make_node_class():
class Node:
previous = -1
distFromSrc = 1000000
visited = False
return Node
node_table = [make_node_class() for line in network]
node\u table
的每个元素现在都是一个完全独立的类,设置node\u table[0]。visited=True
不会影响node\u table[1]的值。visited
。然而,这不太可能是一个非常明智的设计
def createNodeTable(network):
nodeTable = []
for line in network:
nodeTable.append(Node())
return nodeTable
def make_node_class():
class Node:
previous = -1
distFromSrc = 1000000
visited = False
return Node
node_table = [make_node_class() for line in network]