Список в классе почему-то является общим для всех объектов

Рейтинг: 0Ответов: 1Опубликовано: 19.01.2023

Имеется небольшой класс с полем-списком:

class Country:
    citizens = []

Конструктор класса наполняет список 4 объектами другого класса:

def __init__(self):
    for i in range(4):
        self.citizens.append(Citizen())

Создается два объекта класса Country, однако каждый объект имеет в своем списке не 4 жителя, а 8, то есть жителей своей страны и в дополнении второй, что не предусматривалось. Я пришел к выводу что этот список по какой то причине является общим для всех объектов в классе. Почему так происходит, и какая альтернатива спискам в данной ситуации?

Ответы

▲ 2Принят

citizens Создайте на уровне экземпляра класса

def __init__(self):
    self.citizens = []
    for i in range(4):
        self.citizens.append(Citizen())

Списки в Python - изменяемые коллекции + Вы обьявили citizens переменной класса (общая для всех экземпляров)