有人可以帮我吗? Python对象在不同的​​函数之间维护

时间:2010-08-26 20:58:08

标签: python oop scope

我写了这个简单的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()的局部变量。但我不知道如何解决这个问题。

2 个答案:

答案 0 :(得分:2)

忘记copy模块存在,几乎从不需要它,并且经常会产生令人惊讶的结果。

一旦你在o = obackup中说one(),你就已经为正式参数创建了一个新的绑定,然后在print('4...之后超出范围

答案 1 :(得分:0)

oone()的局部变量,因此无法正常修复此问题。但你可以使用一些 您传递给one()two()的参考/指针。

Simulating Pointers in Python