内存中相同的列表地址,用于类的两个不同实例

时间:2018-08-01 05:18:05

标签: python list class memory

我有以下代码:

class PWA_Parse():
    include = []

    def appendInclude(self, element):
        self.include.append(element)

    def printMemory(self):
        print "Class location", hex(id(self)), "List location:", hex(id(self.include))

a = PWA_Parse()
b = PWA_Parse()

a.appendInclude(5)

a.printMemory()
b.printMemory()

两者的列表内存地址相同:

Class location 0x29e9788 List location: 0x29e95d0    
Class location 0x29e97b0 List location: 0x29e95d0

我如何在类定义中创建一个列表,以便在实例化时获得两个单独的列表? (提示:我已经尝试过使用list()了)

2 个答案:

答案 0 :(得分:2)

通过将include声明为类变量,可以使该类的所有实例共享同一变量include

相反,您应该通过include方法初始化__init__()作为实例变量:

class PWA_Parse():
    def __init__(self):
        self.include = []

答案 1 :(得分:1)

__init__方法中创建一个新列表,该列表在实例化后自动被调用。