修改函数中的类项目列表

时间:2019-06-15 12:09:14

标签: python-3.7

我有一个类实例的列表。我想在函数调用中修改列表的类变量。在下面的简单示例中,我无法理解为什么列表中的第一项的类变量似乎与第二项相同...

import { HttpClient } from '@angular/common/http';

当前输出:

import numpy as np
import cv2

class laneMark():
        winC = np.int32()
        winInd = []

        def __init__(self, winC, winInd):
            self.winC=winC
            self.winInd=winInd

        def update(self, nb, series):
            self.winC=nb
            self.winInd=series

#initialisation of the list with '-1' for winC
memLaneMrk= np.ndarray((2),dtype=laneMark)
memLaneMrk[:] = laneMark(-1,[])

# f1 is meant to update the 2 items (class instance) of the list with new values
def f1(laneMarking):
    laneMarking[0].update(2,[1,2,3])
    laneMarking[1].update(4,[5,6,7])
    return laneMarking

memLaneMrk = f1(memLaneMrk)
print ("winC = %d, winInd =%s" %(memLaneMrk[0].winC,memLaneMrk[0].winInd))
print ("winC = %d, winInd =%s" %(memLaneMrk[1].winC,memLaneMrk[1].winInd))

预期输出:

winC = 4, winInd =[5, 6, 7]
winC = 4, winInd =[5, 6, 7]

1 个答案:

答案 0 :(得分:0)

在计算机上查看memLaneMrk

array([<__main__.laneMark object at 0x1170588d0>, <__main__.laneMark object at 0x1170588d0>], dtype=object)

这两项指的是同一个对象。

更新:将memLaneMrk[:] = laneMark(-1,[])替换为memLaneMrk[:] = [laneMark(-1,[]), laneMark(-1,[])]将解决问题。