2014-10-03 2 views
1

Я написал быструю функцию Python для изменения содержимого стека.Содержимое стека 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() 

Однако, когда я иду, чтобы напечатать содержимое каждого пакета (оригинал и наоборот) кажется, как будто все содержимое исходного стека были удалены с помощью метода поп-музыки. Это меня смущает, поскольку я передал его как параметр функции, которая создает временный стек, чтобы вывести содержимое из. Я думал, что этот путь оставил бы неповрежденным.

Мой вопрос в том, почему это происходит, и каков наилучший способ его устранения? Благодаря!

ответ

1

Линия

oldStack = input_stack 

делает oldStack ссылку на тот же объект, а не копию. Вам необходимо использовать

import copy 

для копирования произвольных объектов.

Возможно, лучший способ исправить это - перебирать стек, вместо того, чтобы удалять его.

Возможная полезная ссылка: http://www.python-course.eu/deep_copy.php

+1

Ницца, я знал, что это должно быть что-то вроде этого, я просто не знал, как это решить. Благодаря! – StormTrooper123

1

Вы передали изменяемый объект, чтобы ReverseStack и ReverseStack мутировали его. Python не копирует объекты при передаче функции (что было бы дорого), так что вам придется либо скопировать ее самостоятельно, либо написать функции, которые не изменяют переданное в ... если это не точка в функции в первую очередь ,

+1

Ааа, что имеет смысл, спасибо за помощь! – StormTrooper123

Смежные вопросы