为什么新创建的Python对象具有以前的值

Sea*_*ull 0 python constructor

为什么这段代码:

class B:
    val = []

for i in range(0, 5):
    obj = B()
    print(obj.val)
    obj.val.append('a')
Run Code Online (Sandbox Code Playgroud)

有这样的输出?

[]
['a']
['a', 'a']
['a', 'a', 'a']
['a', 'a', 'a', 'a']
Run Code Online (Sandbox Code Playgroud)

在每次迭代中,都会创建新的B对象.为什么它具有前一个的价值?

Ash*_*ary 6

您正在修改类属性而不是实例属性.更改val为实例属性:

class B(object):
    def __init__(self):
        self.val = []
Run Code Online (Sandbox Code Playgroud)