Add an object to a python list

后端 未结 4 1553
傲寒
傲寒 2021-01-07 17:38

I am trying to add an object to a list but since I\'m adding the actual object when I try to reset the list thereafter, all the values in the list are reset. Is there an act

4条回答
  •  小蘑菇
    小蘑菇 (楼主)
    2021-01-07 17:53

    Is your problem similar to this:

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

    If so, you simply need to copy the objects when you store them:

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

    The objects in question should implement a __copy__ method to copy objects. See the documentation for copy. You may also be interested in copy.deepcopy, which is there as well.

    EDIT: Here's the problem:

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

    You need to append a copy:

    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
    

    But I'm still confused as to where wM is coming from. Won't you just be copying the same wM object over and over, except clearing it after the first time so all the rest will be empty? Or does model() modify the wM (which sounds like a terrible design flaw to me)? And why are you throwing away result?

提交回复
热议问题