python-OOP意外结果

2024-06-10 04:29:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个包含对象列表的列表。更具体地说

l = [ [X1,X2],[X3,X4]]

其中X1,X2,X3,X4是对象

现在,我在类定义中有一个方法,它获取对象列表,并修改当前对象的属性。因此

    Class X:
          def __init__(self,value=1):
             self.value = value
          def func (self,l):
             total = 0
             for x in l:
               total += x.value
          self.value = total

我遇到的问题如下。我必须使用l[0]的元素对l[1]的元素应用函数func。然而,当我这样做的时候,发现l[0]的元素也在改变。因此,当我输入

for obj in l[1]:
   obj.func(l[0])

然后我看到l[0]的元素有理想情况下应该赋给l[1]的值。 列表创建如下

l0 = []
for i in range(2):
  newx= X(i)
l.append(newx)
l=[]
l.append(l0)
l.append(l0)

我错过了什么

更正:似乎python不会在每次附加现有列表时都创建新的列表对象。我基本上需要使用copy命令复制列表。因此,它正在修改现有对象


Tags: 对象inself元素列表forvaluetotal
1条回答
网友
1楼 · 发布于 2024-06-10 04:29:50
l.append(l0)
l.append(l0)

在这里,您将同一列表追加两次。对一个列表中对象的更改将显示在另一个列表中,因为它们是同一个列表

要得到想要的结果,必须创建两个列表,而不是重用第一个列表

相关问题 更多 >