模式识别要求写混合属性相异性矩阵的算法,我用python语言来写的。
里面二元矩阵的初始化我直接用的list的乘法,看起来没什么问题。。初始化完是d = [[0,0,0],[0,0,0],[0,0,0]]
但是判断l[0]和l[1]不同之后,除了d[1][0]之外,d[0][0]和d[2][0]都变成了1!
*操作符在实现上是复制了值的引用,而不是创建了新的对象。所以list的三个item指向的是同一个地址!
*操作符对于不可变对象是安全的,对于可变对象要小心。
而python里list是可变对象,tuple是不可变对象。
将上述初始化声明换成以下就ok了
网友评论