python-3.7 - 修改函数中的类项列表
问题描述
我有一个类实例列表。我想在函数调用中修改列表的类变量。在下面的简单示例中,我不明白为什么对于列表中的第一项,类变量似乎与第二项相同...
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]
解决方案
memLaneMrk
在我的电脑上看一下:
array([<__main__.laneMark object at 0x1170588d0>,
<__main__.laneMark object at 0x1170588d0>], dtype=object)
这两个项目指的是同一个对象。
更新:替换memLaneMrk[:] = laneMark(-1,[])
为memLaneMrk[:] = [laneMark(-1,[]), laneMark(-1,[])]
将解决问题。
推荐阅读
- php - Laravel 的 Artisan::call() 不适用于标志参数
- python - 我想从 .txt 文件中读取多行
- go - 如何使用 golang 运行 .msi 文件?
- node.js - 如何保护应用程序进行 REST 调用的凭据
- node.js - Azure WebSockets + NodeBB + Node.js 代理
- python - 将水平/垂直滑块转换为单个按钮
- php - 如何使用 Google_Service_Pubsub_Topics_Resource (PHP) 向 Google Pubsub 消息添加属性?
- hp-uft - SystemUtil.Run 不会执行文件
- database - 在编程或数据库中过滤表是否更快?
- android - 如何通过 httpurlconnection 发送图像