Python 在for循环中循环并比较/变异类实例会导致意外行为

Python 在for循环中循环并比较/变异类实例会导致意外行为,python,for-loop,graph-theory,Python,For Loop,Graph Theory,我有一个类节点,它表示有向图上的一个节点。节点包含一个序列(一串字母,本例中为DNA的4个碱基),以及由值k定义的前缀和后缀,其中前缀是序列的前k个字母,后缀是序列的最后k个字母 如果一个节点的后缀与另一个节点的前缀相同,则第一个节点应指向第二个节点,一个节点可以指向多个其他节点,但不能指向自身 我从一个文件中按顺序读取,从中列出一个节点列表,并尝试设置列表“nextNodes”,每个节点上都有一个属性,其中包含它指向的所有节点 在具有两个嵌套for in循环的节点列表中循环,将每个节点与每个节

我有一个类节点,它表示有向图上的一个节点。节点包含一个序列(一串字母,本例中为DNA的4个碱基),以及由值k定义的前缀和后缀,其中前缀是序列的前k个字母,后缀是序列的最后k个字母

如果一个节点的后缀与另一个节点的前缀相同,则第一个节点应指向第二个节点,一个节点可以指向多个其他节点,但不能指向自身

我从一个文件中按顺序读取,从中列出一个节点列表,并尝试设置列表“nextNodes”,每个节点上都有一个属性,其中包含它指向的所有节点

在具有两个嵌套for in循环的节点列表中循环,将每个节点与每个节点进行比较,将生成包含不应指向的节点的每个节点的“nextNodes”列表。此外,每个节点的列表都是相同的

我尝试使用itertools.combines方法来比较节点,认为问题与for in循环和多次比较有关,但无论哪种方式都会出现相同的行为。我很确定这个问题发生在for循环的执行过程中,但我不知道它是什么

以下是我的代码(Python 2.7):

例如: 如果“seqs.txt”为:

>Node 1
AAACCCGGG
>Node 2
GGGTTTCCC
>Node 3
CCCGGGAAA
我们希望节点1指向节点2,节点2指向节点3,节点3指向节点1。但这就是结果:

Node 1 -> Node 2
Node 1 -> Node 1
Node 1 -> Node 3
Node 2 -> Node 2
Node 2 -> Node 1
Node 2 -> Node 3
Node 3 -> Node 2
Node 3 -> Node 1
Node 3 -> Node 3

我认为这里的问题是,在节点的构造函数中,使用列表作为nextNodes的默认值。列表是可变的,因此当您将默认值分配给self.nextNodes时,实际上是将非常相同的列表而不是新列表分配给每个节点。然后,当您在任何节点中附加到它时,它们都会得到,因为它们指向完全相同的列表。实际上,附加到self.nextNodes实际上是在更改默认值

Node 1 -> Node 2
Node 1 -> Node 1
Node 1 -> Node 3
Node 2 -> Node 2
Node 2 -> Node 1
Node 2 -> Node 3
Node 3 -> Node 2
Node 3 -> Node 1
Node 3 -> Node 3