Python中的对象变量有多少内存副本?

这个问题在这里已经有了答案:

  • 静态类变量可能吗? 16个答案

  • 在python中,在类作用域声明的任何东西都是有效的。 当你在一个实例上查找该属性时,python没有找到它,所以它在该类上查找(然后继续查找基类,直到方法解析顺序)。 所以,就你的情况而言, x.listA.list因为没有附加到x实例属性list 。 与之相似, y.list相同A.list所以x.listy.list指的是相同的底层列表。 (唷!)

    据我了解,这至少与Java的静态类似(尽管我在Java中不够流畅,没有说明它有多相似)。

    从类中分离属性的典型方法是将该属性绑定到实例(通常在__init__ ):

    class A(object):
        def __init__(self):
            self.list = []
    

    在上面的例子中, self是实例,它被隐式传递给任何'普通'方法(包括像__init__这样的“魔术”方法)。

    现在,如果您再次进行实验,则会看到x.list的值为[1, 3]y.list值为[2, 4]


    现在测试。 如果你在这堂课上做实验,会发生什么?

    class A(object):
        list = []
        def __init__(self):
            self.list = []
    

    答案: x.list = [1, 3]y.list = [2, 4] 。 原因是当python执行x.list ,它首先查看实例(在查看该类之前)。 由于具有名称list的属性在实例中找到,因此使用该属性。

    链接地址: http://www.djcxy.com/p/78773.html

    上一篇: How many memory copies do object variables in Python have?

    下一篇: Behavior of class variables