Python 3.5处理列表很奇怪

Python 3.5 handling lists strangely

本问题已经有最佳答案,请猛点这里访问。

我遇到了一些相当奇怪的行为。

1
2
3
4
5
6
7
8
9
10
11
class Example:
    test = []

    def __init__(self):
        print(self.test)
        self.test.append(0)


ex1 = Example()
ex2 = Example()
ex3 = Example()

我希望每次都能输出[],但是,我得到:

1
2
3
[]
[0]
[0, 0]

这个巫师是什么?你能帮我理解吗?谢谢你!

编辑:嘿,谢谢你的快速回答。

为了澄清,如果"test"是静态的,那么当我将"self.test.append(0)"替换为"self.test=[0]"时,为什么我没有注意到这种行为?


test是一个静态类属性,您可以使用值不断更新它。在这方面,Python与其他一些语言不同。要使其成为对象属性,请在构造函数中使用self.test = []


test有一个类级静态变量,在类的实例之间共享。

您需要在__init__方法中初始化test

1
2
3
4
5
6
class Example:

    def __init__(self):
        self.test = []
        print(self.test)
        self.test.append(0)