我试图在Python
中实现一个堆栈机器,使用list
作为我的堆栈,dictionary
作为当前机器状态。但并没有按计划进行。经过一些调试,我发现当我将机器状态存储到堆栈中,然后更改它的状态时,存储的状态也会更改。
下面是一个例子来说明我的问题:
MyStack = []
myState = {}
myState['param'] = '1'
MyStack.append(myState)
myState['param'] = '2'
MyStack.append(myState)
myState['param'] = '3'
MyStack.append(myState)
print(MyStack.pop())
print(MyStack.pop())
print(MyStack.pop())
结果是:
{'param': '3'}
{'param': '3'}
{'param': '3'}
而不是
{'param': '3'}
{'param': '2'}
{'param': '1'}
就像我想的那样
显然,Python
存储在list
中的不是我的dictionary
的副本,而是对它的引用。所以,实际上所有堆叠的项目都是相同的myState
对象。当我得到这个后,我用dictionary.copy()
方法来解决这个问题,就像这样:MyStack.append(myState.copy())
。但这似乎有点不自然
所以,问题是:在Python
中实现dictionary
类型堆栈的最惯用方法是什么
在这里,您在
MyStack.append
内传递相同的myState
对象,该对象每次都会更新,而不是创建一个新对象。所以,在列表中,你总是得到相同的元素让我们看看你的程序的数据流
希望你现在明白了
如何解决这个问题:
确保每次都创建一个新词典,而不是使用同一个词典
在
myState['param'] = '2'
和myState['param'] = '3'
之前,打个电话代码:
输出:
相关问题 更多 >
编程相关推荐