Python—跨类的多个实例创建类中列表字段的单个副本

Python—跨类的多个实例创建类中列表字段的单个副本,python,python-3.x,Python,Python 3.x,我有以下课程。我创建的类的每个实例都具有列表字段的相同副本 class Vertex: label = None data = None connected_vertices_ids = [] def __init__(self, data): self.data = data self.label = randint(1, 100) def __init__(self, vertex_id, data):

我有以下课程。我创建的类的每个实例都具有列表字段的相同副本

class Vertex:
    label = None
    data = None
    connected_vertices_ids = []

    def __init__(self, data):
        self.data = data
        self.label = randint(1, 100)

    def __init__(self, vertex_id, data):
        self.data = data
        self.label = vertex_id

    def print_vertex(self):
        print(self.label, self.connected_vertices_ids)
用法

结果

140582021542688 140582025347656
140582021542744 140582025347656
140582021542800 140582025347656
140582021542856 140582025347656
140582021542912 140582025347656
140582021542968 140582025347656


我的错。我是python新手,不熟悉内存模型。我认为在构造函数外部初始化的字段的行为是静态的。当我将类代码更改为以下代码时,问题就解决了

class Vertex:
    label = None
    data = None
    connected_vertices_ids = None

    def __init__(self, data):
        self.data = data
        self.label = randint(1, 100)
        self.connected_vertices_ids = []

    def __init__(self, vertex_id, data):
        self.data = data
        self.label = vertex_id
        self.connected_vertices_ids = []

    def print_vertex(self):
        print(self.label, self.connected_vertices_ids)

如果有人能更正式地回答这个问题,我将不胜感激

@depperm:它是对象的标识符,或多或少是存储对象的内存地址。您有两个构造函数吗?这是允许的吗?你是对的,python中不允许有多个构造函数。不知道为什么当时没有爆炸。然而,这并没有引起我发布的问题。我贴出了答案。如果您有任何需要添加的内容,请确保您的代码在复制到帖子中时具有正确的缩进。您的推理也是正确的
connected_Vertex_id
被声明并分配为
Vertex
类的属性,因此它本质上是所有实例使用的单个静态属性。
class Vertex:
    label = None
    data = None
    connected_vertices_ids = None

    def __init__(self, data):
        self.data = data
        self.label = randint(1, 100)
        self.connected_vertices_ids = []

    def __init__(self, vertex_id, data):
        self.data = data
        self.label = vertex_id
        self.connected_vertices_ids = []

    def print_vertex(self):
        print(self.label, self.connected_vertices_ids)