我写了这个简单的python程序来帮助我解决另一个程序中的错误。它清楚地说明了这个问题。
import copy
class Obj(object):
def __init__(self, name):
self.name = name
def one(o):
print("1: o.name:", o.name) # "foo"
obackup = copy.deepcopy(o)
o.name = "bar"
print("2: o.name:", o.name) # "bar"
print("3: obackup.name:", obackup.name) # "foo"
o = obackup
print("4: o.name:", o.name) # "foo"
def two(o):
print("5: o.name:", o.name) # "bar"!
def main():
o = Obj("foo")
one(o)
two(o)
main()
我的猜测是o
被某种方式覆盖为函数one()
的局部变量。但我不知道如何解决这个问题。
答案 0 :(得分:2)
忘记copy
模块存在,几乎从不需要它,并且经常会产生令人惊讶的结果。
一旦你在o = obackup
中说one()
,你就已经为正式参数创建了一个新的绑定,然后在print('4...
之后超出范围
答案 1 :(得分:0)
o
是one()
的局部变量,因此无法正常修复此问题。但你可以使用一些
您传递给one()
和two()
的参考/指针。