向python lis添加对象

2024-05-13 01:46:24 发布

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

我试图将一个对象添加到列表中,但由于我在尝试重新设置列表时正在添加实际对象,因此列表中的所有值都将被重置。 是否有一种实际的方法可以将监视器对象添加到列表中,并更改值,而不影响已保存在列表中的值?

谢谢

代码:

arrayList = []

for x in allValues:


        result = model(x)

        arrayList.append(wM)

        wM.reset()

其中,wM是一个监控类,正在用模型方法计算/计算


Tags: 对象方法代码in列表formodelresult
3条回答

在修改列表内容之前,需要创建列表的副本。复制列表的快捷方式是:

mylist[:]

示例:

>>> first = [1,2,3]
>>> second = first[:]
>>> second.append(4)
>>> first
[1, 2, 3]
>>> second
[1, 2, 3, 4]

以及显示修改原始列表的默认行为(因为Python中的名称只是对底层对象的引用):

>>> first = [1,2,3]
>>> second = first
>>> second.append(4)
>>> first
[1, 2, 3, 4]
>>> second
[1, 2, 3, 4]

注意,这只适用于列表。如果需要复制词典的内容,则必须按照其他人的建议使用copy.deepcopy()

尽管您应该展示代码的外观,但我认为这种情况非常常见。见copy/deepcopy

你的问题与此类似吗:

l = [[0]] * 4
l[0][0] += 1
print l # prints "[[1], [1], [1], [1]]"

如果是,则只需在存储对象时复制它们:

import copy
l = [copy.copy(x) for x in [[0]] * 4]
l[0][0] += 1
print l # prints "[[1], [0], [0], [0]]"

有问题的对象应该实现一个__copy__方法来复制对象。请参阅^{}的文档。您可能还对copy.deepcopy感兴趣,它也在那里。

编辑:问题在于:

arrayList = []
for x in allValues:
    result = model(x)
    arrayList.append(wM) # appends the wM object to the list
    wM.reset()           # clears  the wM object

您需要附加一份副本:

import copy
arrayList = []
for x in allValues:
    result = model(x)
    arrayList.append(copy.copy(wM)) # appends a copy to the list
    wM.reset()                      # clears the wM object

但我还是不清楚wM是从哪里来的。你不就是一遍又一遍地复制同一个wM对象吗,除了第一次清除它之后,剩下的都是空的吗?或者model()修改wM(这听起来像是一个可怕的设计缺陷)?你为什么要扔掉result

相关问题 更多 >