python循环下给类属性赋值出现诡异问题

在循环下给类静态属性赋值,但遇到问题,代码如下

class Main:
    State = []

    def main(self):
        self.State.append([1,2,3,4])

list1 = [1,2,3,4]
a = Main()
while True:
    a.main()
    Main.State = list1
    print(a.State)
    time.sleep(1)

如果像这样把list1定义在循环外面使list1的值被修改,而打印出来的内容也越来越长
像这样

 [1, 2, 3, 4, [1, 2, 3, 4], [1, 2, 3, 4], [1, 2, 3, 4], [1, 2, 3, 4]]

而如果放在里面,就没有问题,在每次执行完main函数后会对state属性重新赋值,这是什么原因?

python 的赋值是创建了对象的引用,不是复制对象,就像是指针,实际上指向同一个地方,所以才会出现你看到的。
你把Main.State = list1改成
Main.State = list1.copy()
就明白了

list1应该是和state指向了同一个地方,你可以尝试打印id(list1)和id(Main.State)来查看