为什么列表中所有对象的属性都会发生变化?

时间:2017-07-15 11:04:58

标签: python duplicates

我想在python中创建对象数组。

class user:
    j = [0, 0]

AllUsers = []
AllUsers.append(user)
AllUsers.append(user)

AllUsers[0].j[0] = 1

for i in AllUsers:
    print(i.j)

我希望输出:

[1, 0]
[0, 0]

但我得到了:

[1, 0]
[1, 0]

错误在哪里?

所以,我已经看到了"阵列阵列的类似问题"但我无法使用他们的解决方案。

2 个答案:

答案 0 :(得分:3)

您正在混淆实例和类。这是一个有效的例子:

class user:
    def __init__(self):
        self.j = [0, 0]


AllUsers = []
AllUsers.append(user())  # note the extra () which creates a new instance
AllUsers.append(user())

AllUsers[0].j[0] = 1

for i in AllUsers:
    print(i.j)

答案 1 :(得分:0)

我认为这是您尝试粘贴的代码?

README.md

有两个主要问题。首先,class user: j = [0, 0] AllUsers = [] AllUsers.append(user) AllUsers.append(user) AllUsers[0].j[0] = 1 for i in AllUsers: print(i.j) 是一个列表,而不是一个数组。其次,您将一个类附加到列表中,而不是该类的实例。要实现您的目标,您需要创建附加的用户类的实例。这看起来更像是

AllUsers

为了格式化,通常最好为您的类使用大写的第一个字母,这样它们很容易区分变量和类实例。