Запомни одну простую вещь: переменная в питоне - это просто ссылка, ярлык!
Покажу на примере:
a = [1, 2, 3] # а содержит ссылку на некий список
b = a # b содержит ссылку на тот же список!
print(b is a) # True. b - это тот же объект, что и a
a.append(4) # Ссылка а не меняется, меняется объект по этой ссылке!
print(a) # [1, 2, 3, 4]
print(b) # [1, 2, 3, 4] так как b ссылается на то же, что и a
a = [1, 2] # теперь a хранит ссылку на другой объект-список!
print(b is a) # False. Даже если бы содержимое списков совпало, это два разных объекта.
print(a) # [1, 2]
print(b) # [1, 2, 3, 4] так как b хранит ссылку на старый список
a.append(5)
print(a) # [1, 2, 5] изменили объект, на который ссылается a
print(b) # [1, 2, 3, 4] b ссылается на другой объект, он остался не изменён.
Соответственно, у твоей проблемы есть четыре разных решения.
1. Делай копию тогда, когда она тебе понадобится (т.е. тогда, когда в исходном списке уже лежат нужные значения). Не полагайся на то, что две доступные извне переменные всегда будут указывать на один и тот же список.
2а. Не заменяй список на другой. Если ты хочешь заменить именно
содержимое списка, а не заменять один объект-список на другой, можно написать так:
a[:] = [1, 2, 3, 4]
Для надёжности можешь этот список показать как read-only property вместо обычного поля класса - тогда можно будет модифицировать объект списка (добавлять/удалять элементы), но нельзя будет заменить список на другой.
2б. Покажи наружу список как read-write property, при записи в property записывай список в обе переменные.
3. Добавь в класс методы для управления элементами списка, сам список наружу не показывай.