有人可以解释这两个列表之间的区别吗? Python-邻接矩阵

问题描述

下面,在邻接矩阵方法中,我创建了2个产生相同结果的数组,但是当更改数组中的值时,我得到2个不同的结果。我最初尝试标记为“ array_matrixx”的那个,但是更改嵌套列表中的值不仅会更改列表之一,而且实际上会更改所有嵌套列表。另一方面,标记为“ array_matrix”的数组使用另一种方法用零填充数组,并产生更改正确嵌套列表中的索引的正确结果。如果在for循环之前它们是相同的,为什么会发生这种情况?

我已经列出了运行两个列表进行比较所需的所有代码。只需将其中一个注释掉即可。

class Node(object):
    def __init__(self,value):
        self.value = value
        self.edges = []

class Edge(object):
    def __init__(self,value,node_from,node_to):
        self.value = value
        self.node_from = node_from
        self.node_to = node_to

class Graph(object):
    def __init__(self,nodes=[],edges=[]):
        self.nodes = nodes
        self.edges = edges

    def insert_node(self,new_node_val):
        new_node = Node(new_node_val)
        self.nodes.append(new_node)
        
    def insert_edge(self,new_edge_val,node_from_val,node_to_val):
        from_found = None
        to_found = None
        for node in self.nodes:
            if node_from_val == node.value:
                from_found = node
            if node_to_val == node.value:
                to_found = node
        if from_found == None:
            from_found = Node(node_from_val)
            self.nodes.append(from_found)
        if to_found == None:
            to_found = Node(node_to_val)
            self.nodes.append(to_found)
        new_edge = Edge(new_edge_val,from_found,to_found)
        from_found.edges.append(new_edge)
        to_found.edges.append(new_edge)
        self.edges.append(new_edge)
    
    def get_adjacency_matrix(self):
        max_index = self.find_max_index()
        adjacency_matrixx = [([0] * (max_index + 1))] * (max_index + 1)
        print(adjacency_matrixx)
        adjacency_matrix = [[0 for i in range(max_index + 1)] for j in range(max_index + 1)]
        print(adjacency_matrix)
        for edge_object in self.edges:
            adjacency_matrix[edge_object.node_from.value][edge_object.node_to.value] = edge_object.value
        return adjacency_matrix
        
    
    def find_max_index(self):
        max_index = -1
        if len(self.nodes):
            for node in self.nodes:
                if node.value > max_index:
                    max_index = node.value
        return max_index

graph = Graph()
graph.insert_edge(100,1,2)
graph.insert_edge(101,3)
graph.insert_edge(102,4)
graph.insert_edge(103,3,4)

# Should be [[0,0],[0,100,101,102],103],0]]
print(graph.get_adjacency_matrix())

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)