debugging 在Python中更改列表的第一个元素会更改其他所有元素[duplicate]

gcmastyq  于 2023-03-19  发布在  Python
关注(0)|答案(1)|浏览(123)

此问题在此处已有答案

(17个答案)
8小时前关门了。
假设我有以下类:

class Elem():
    def __init__(self, valAcum=0, data=0, prev=0):
        self.valAcum = valAcum
        self.data = data
        self.prev = prev

然后,我做了以下几点:

D = [Elem()] * 3
D[0].data = 3
print(D) 
# [(0, 3, 0), (0, 3, 0), (0, 3, 0)]

发生了什么?执行D[i].f = x会在来自D的every元素中设置f = x。为什么会发生这种情况?如何避免?

plicqrtu

plicqrtu1#

您的列表有三个引用同一个Elem对象。当您修改它时,更改将通过所有这些引用可见,因为它们都引用同一个对象。
相反,您应该创建三个不同的对象。例如:

D = [Elem() for _ in range(3)]

相关问题