如何在python中通过引用分配变量?

chr*_*ise 5 python

我模糊理解Python是按值分配的。有没有一种方法可以通过引用分配python变量?因此,在下面的示例中,它实际上将oa更改为2吗?

class myClass():
    def __init__(self):
        self.a = 1

    def __str__(self):
        _s = ''
        for att in vars(self):
            _s += '%s, %s' %(att, getattr(self,att))
        return _s


o = myClass()
x = o.a
x = 2
print o
Run Code Online (Sandbox Code Playgroud)

Tom*_*ton 5

简单的答案是python中的所有变量都是引用。一些引用是针对不可变的对象(例如字符串,整数等),而某些引用是针对可变的对象(列表,集合)。更改引用对象的值(例如添加到现有列表)和更改引用(更改变量以引用完全不同的列表)之间存在细微的区别。

在您的示例中,您最初x = o.a是将变量x作为对任何变量的引用o.a(对的引用1)。然后x = 2,您将更改x引用(现在引用2,但o.a仍引用)1

关于内存管理的简短说明:

Python为您处理所有这一切的内存管理,因此,如果您执行以下操作:

x = "Really_long_string" * 99999
x = "Short string"
Run Code Online (Sandbox Code Playgroud)

当第二条语句执行时,Python将注意到不再有对“真正长字符串”字符串对象的引用,它将被销毁/取消分配。