链接列表输出在Python 2.7中不是预期的

时间:2016-09-26 05:06:47

标签: python python-2.7

实现链接列表,我希望输出为0, -1, -2, -3, ... etc.,但它是-98, -98, -98, -98, ... etc.,想知道我的代码有什么问题?感谢。

MAXSIZE = 100
freeListHead = None

class StackNode:
    def __init__(self, value, nextNode):
        self.value = value
        self.nextNode = nextNode

if __name__ == "__main__":
    # initialization for nodes and link them to be a free list
    nodes=[StackNode(-1, None)] * MAXSIZE
    freeListHead = nodes[0]
    for i in range(0, len(nodes)-1):
        nodes[i].nextNode = nodes[i+1]
        nodes[i].value = -i
    for node in nodes:
        # output -98, -98, -98, -98, ... etc.
        # exepcted output, 0, -1, -2, -3, ... etc.
        print node.value

1 个答案:

答案 0 :(得分:10)

这是问题所在:

# initialization for nodes and link them to be a free list
nodes=[StackNode(-1, None)] * MAXSIZE

当您使用乘法运算符时,它会为相同的对象创建多个引用,如上所述in this StackOverflow answer。因此,更改一个节点的值(如nodes[i].value = -i)将影响每个节点,因为列表中的每个项都指向同一个对象。

在同一个链接的答案中,解决方案是使用这样的列表理解:

nodes = [StackNode(-1, None) for i in range(MAXSIZE)]

另外,请注意,您没有设置最后一个元素的值,因此输出(在我上面建议的修复之后)将是:

0, -1, -2, ..., -98, -1