这是我将数据从旧堆栈复制到新堆栈然后将它们排入队列的代码
for word in dictionary:
if len(word) == len(lastWord): #Make sure same len
if (oneLetterDiff(word, dequeuedStack.peek())) == True and (word in dequeuedStack._data) == False: #One letter difference
s = MyStack()
print 'before %s' % dequeuedStack._data
s.copyFrom(dequeuedStack) #Copy stack over
s.push(word) #Add new word
print 'after %s' % s._data
q.enqueue(s) #Enqueue the stack
print 'after copying %s' % dequeuedStack._data
print word
这是复制列表的代码
def copyFrom(self, aStack):
self._data = aStack._data
这是将它附加到队列
def enqueue(self, value):
self._data.append(value)
然而,dequeuedStack._data
在我没有调用任何修改方法的情况下被更改了
这是输出的一个例子
['stone', 'atone']
before ['stone', 'atone']
after ['stone', 'atone', 'alone']
after copying ['stone', 'atone', 'alone']
alone
before ['stone', 'atone', 'alone']
after ['stone', 'atone', 'alone', 'clone']
after copying ['stone', 'atone', 'alone', 'clone']
clone
答案 0 :(得分:2)
Python中的字典是引用。这意味着当您执行self._data = aStack._data
时,您实际上将两个词典都设为相同的引用,而不是实际创建新词典并将值复制到其中。
要进行深层复制,请尝试以下操作:
import copy
...
def copyFrom(self, aStack):
self._data = copy.deepcopy(aStack)
答案 1 :(得分:0)
将我的复制方法更改为列出到self._data = aStack._data[:]
并且可以正常工作