class A: list1 = [] number = 0 a, b = A(), A() print(a.number, b.number, A.number) a.number = 2 print(a.number, b.number, A.number) # understable that only a affected A.number = 3 print(a.number, b.number, A.number) # understable that b.number and A.number affected only, because a.number overrides print(a.list1, b.list1, A.list1) a.list1.append(1) print(a.list1, b.list1, A.list1) ## why all changed? b.list1 = [2] print(a.list1, b.list1, A.list1) # now b.list1 overrides