我在Python中使用了以下堆栈类来存储另一个类的对象。
class Stack :
def __init__(self) :
self.items = []
def push(self, item) :
self.items.append(item)
def pop(self) :
return self.items.pop()
def isEmpty(self) :
return (self.items == [])
scopeStack=Stack();
object1=AnotherClass();
object1.value=2;
scopeStack.push(object1);
在堆栈外部更改对象object1的内容时,堆栈对象的内容也发生了变化。
object1.value=3;
obj=scopeStack.pop();
print obj.value; #gives output 3
我应该怎么做才能在局部变量和堆栈的内部变量之间进行动态绑定?
答案 0 :(得分:3)
查看找到的copy
模块here。您要找的是copy.deepcopy()
。
示例:
class Obj:
def __init__(self, value):
self.value = value
x = Obj(5)
y = copy.deepcopy(x)
print 'x:', x.value
print 'y:', y.value
x.value = 3
print 'x:', x.value
print 'y:', y.value
输出:
x: 5
y: 5
x: 3
y: 5
答案 1 :(得分:2)
它不是动态绑定,只是对同一个对象的多个引用。当你执行scopeStack.push(object1)
时,将该对象推送到堆栈上 - 不是对象的名称,或对象的内容,而是对象本身。如果您以后修改该对象,它的修改将显示在有引用的任何地方。
如果您希望堆栈上的版本是独立的,那么您需要复制它并推送副本。您可以尝试使用copy
模块,但如果您的对象是自定义类的实例,则可能需要为该类编写自己的复制机制。 Python无法自动知道如何复制您创建的任何自定义类的实例。
答案 2 :(得分:1)
如果需要对象的副本,则需要复制或深度复制对象。查看copy
模块。