python图数据结构定义出现类默认参数共享问题

本文讲解了如何在Python中使用类定义图数据结构,特别是针对Node类的初始化修改,以避免默认参数共享导致的问题。通过实例说明了如何确保每个Node实例拥有独立的nexts列表,以提高代码的健壮性和数据一致性。
摘要由CSDN通过智能技术生成
# 图数据结构定义
class Graph():
    def __init__(self):
        self.nodes = dict()
        self.edges = set()
        
class Node():
    def __init__(self, value, i=0, o=0, nexts=[], edges=[]):
        self.value = value
        self.i = i	# 入度
        self.o = o	#出度
        self.nexts = nexts # 该结点所有指向的结点列表
        self.edges = edges

class Edge():
    def __init__(self, fro, to, weight=0):
        self.fro = fro
        self.to = to
        self.weight = weight
 fromNode = Node(fro)
 toNode = Node(to)
 fromNode.nexts.append(toNode)

创建两个结点fromNode,toNode ,当在fromNode的nexts列表中加入toNode结点时,发现toNode结点的nexts中也加入了该结点,从下面两张图可以看到,两个实例的的nexts列表的地址是相同的,所以当fromNode的nexts插入toNode 时,toNode 的nexts中也会改变。也就是说当默认参数是可变类型时,不同的实例共享一个默认参数。

在这里插入图片描述
在这里插入图片描述
将Node定义修改如下,每个实例拥有自己的nexts表,避免共享产生的问题

class Node():
    def __init__(self, value, i=0, o=0):
        self.value = value
        self.i = i
        self.o = o
        self.nexts = []
        self.edges = []
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值