我寫了這個簡單的python程序來幫助我處理另一個程序中的錯誤。它清楚地說明了這個問題。有人可以幫我嗎?在不同的函數之間維護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()
。但我不知道如何解決這個問題。
由於超出範圍,一個新的綁定。很高興知道沒有簡單的解決方法。我現在通過讓所有相關函數返回對象來修復它。 – Violet 2010-08-26 21:24:42
重構代碼(如前所述,返回對象工作正常)比試圖模擬指針要好得多。 – habnabit 2010-08-26 22:37:27