Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python堆栈内容在传递给函数时被覆盖_Python_Function_Python 2.7_Stack - Fatal编程技术网

Python堆栈内容在传递给函数时被覆盖

Python堆栈内容在传递给函数时被覆盖,python,function,python-2.7,stack,Python,Function,Python 2.7,Stack,我编写了一个快速Python函数来反转堆栈的内容 def ReverseStack(input_stack): oldStack = input_stack newStack = Stack() while not oldStack.isEmpty(): item = oldStack.pop() newStack.push(item) return newStack s = Stack() s.push('hello') s.

我编写了一个快速Python函数来反转堆栈的内容

def ReverseStack(input_stack):
    oldStack = input_stack
    newStack = Stack()

    while not oldStack.isEmpty():
        item = oldStack.pop()
        newStack.push(item)
    return newStack

s = Stack()
s.push('hello')
s.push('world')
s.push('I')
s.push('live')
s.push('underwater')

new = ReverseStack(s)

print "\nOriginal stack..."
while not s.isEmpty():
    print s.pop()

print "\nNew stack..."
while not new.isEmpty():
    print new.pop()
但是,当我打印每个堆栈的内容(原始和反转)时,似乎原始堆栈的所有内容都已通过pop方法删除。这让我很困惑,因为我将它作为参数传递给了一个函数,该函数创建了一个临时堆栈来弹出内容。我原以为这样会让原作完好无损


我的问题是为什么会发生这种情况,纠正这种情况的最佳方法是什么?谢谢

您将一个可变对象传递给ReverseStack,ReverseStack对其进行了变异。Python在传递给函数时不会复制对象(这会很昂贵),所以您要么自己复制对象,要么编写不修改传入内容的函数。。。除非这是函数的第一点。

oldStack = input_stack
使oldStack成为对同一对象的引用,而不是副本。你需要使用

import copy
复制任意对象

也许纠正它的最好方法是遍历堆栈,而不是从堆栈中弹出项


可能有用的参考资料:

不错,我知道一定是这样的,我只是不知道如何着手解决它。谢谢