Python 用于访问成员的引用对象

Python 用于访问成员的引用对象,python,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

我想更改对象成员的值。我可以这样做,只要我处理对象本身。但是,当我存储对此成员的引用时,它不起作用。相反,它会更改引用对象

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"

如何使用引用对象来更改成员?

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

另一方面,
list
s是可变对象,允许您进行所需的行为。这里有一个例子:

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中的
int
strings
是不可变的对象。这意味着它们传递的是值的副本,而不是引用

另一方面,
list
s是可变对象,允许您进行所需的行为。这里有一个例子:

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]

那么,你怎么能绕过这个问题呢?这有点难看,但您可以使用容器(列表)来包含稍后要引用的变量。在这里你可以找到一个相关的帖子:

这对实例来说并不特殊。使用
foo=3
fooref=foo
foo=4
也会得到同样的结果。您重新获得一个名称以指向一个新对象,因此
fooref
将不再看到该更改。这对于实例来说并不特殊。使用
foo=3
fooref=foo
foo=4
也会得到同样的结果。您恢复一个名称以指向一个新对象,因此
fooref
将不再看到该更改。