用于访问成员的引用对象

时间:2017-05-18 09:22:39

标签: python

我想更改对象成员的值。只要我对对象本身进行处理,我就可以做到这一点。但是,当我存储对该成员的引用时,它不起作用。相反,它会更改参考对象。

class MyClass:
    def __init__(self, name):
        self.a = 1
        self.b = name

obj1=MyClass("string")
refob1=obj1.a
refob2=obj1.b

#I can change my object like this:
obj1.a=99
obj2.b="changed"


#But not like this:
refob1 = 1
refob2 = "changed_reference"

如何使用参考对象更改成员?

1 个答案:

答案 0 :(得分:2)

这是因为python中的intstrings是不可变对象。这意味着它们传递的是值的副本而不是引用。

另一方面,

list是可变对象并允许您想要的行为。这里有一个例子:

class MyClass(object):
    def __init__(self):
        self.a = 3
        self.b = [1]

obj = MyClass()
outside_a = obj.a
outside_a = 3 # outside_a is just a copy of obj.a value, so it won't change obj object
outisde_b = obj.b
outside_b[0] = 3 # Lists are mutabe, so this will change obj.b value
print obj.b # Prints [3]

那么,你怎么能绕过这个?它有点难看,但您可以使用容器(列表)来包含稍后要引用的变量。您可以在此处找到相关帖子:Python passing an integer by reference