首页 > 解决方案 > 修改函数中的类项列表

问题描述

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

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]

预期输出:

winC = 3, winInd =[1, 2, 3]
winC = 4, winInd =[5, 6, 7]

标签: python-3.7

解决方案


memLaneMrk在我的电脑上看一下:

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

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

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


推荐阅读