图中顶点之间的意外连接
Unintended connections between vertices in graph
所以我正在做一些图论练习,并且有这个简单的顶点 class:
class Vertex:
def __init__(self, value, connections={}):
self.value = value
self.connections = connections
def add_connection(self, vertex, weight=1):
self.connections[vertex] = weight
然后我创建了一些像这样的顶点:
a = Vertex(1)
b = Vertex(2)
c = Vertex(3)
d = Vertex(4)
并尝试像这样在它们之间添加边:
a.add_connection(b)
a.add_connection(c)
当我打印 a 的连接时,它会正常工作并显示它连接到 b 和 c。
但是,当我打印到 b 顶点的连接时,它显示了到自身的连接和到 c 顶点的连接(与 a 顶点相同的连接)。
我如何将其修复为仅在预期顶点之间有连接?
因为对象都共享同一个 connections
字典,这是因为 methods/functions 的默认值是在它们的定义中计算的,避免这种情况的一种方法是使用这样的东西:
class Vertex:
def __init__(self, value, connections=None):
if connections is None:
connections = {}
self.value = value
self.connections = connections
def add_connection(self, vertex, weight=1):
self.connections[vertex] = weight
所以我正在做一些图论练习,并且有这个简单的顶点 class:
class Vertex:
def __init__(self, value, connections={}):
self.value = value
self.connections = connections
def add_connection(self, vertex, weight=1):
self.connections[vertex] = weight
然后我创建了一些像这样的顶点:
a = Vertex(1)
b = Vertex(2)
c = Vertex(3)
d = Vertex(4)
并尝试像这样在它们之间添加边:
a.add_connection(b)
a.add_connection(c)
当我打印 a 的连接时,它会正常工作并显示它连接到 b 和 c。
但是,当我打印到 b 顶点的连接时,它显示了到自身的连接和到 c 顶点的连接(与 a 顶点相同的连接)。
我如何将其修复为仅在预期顶点之间有连接?
因为对象都共享同一个 connections
字典,这是因为 methods/functions 的默认值是在它们的定义中计算的,避免这种情况的一种方法是使用这样的东西:
class Vertex:
def __init__(self, value, connections=None):
if connections is None:
connections = {}
self.value = value
self.connections = connections
def add_connection(self, vertex, weight=1):
self.connections[vertex] = weight