Python的list乘法【巨坑】

模式识别要求写混合属性相异性矩阵的算法,我用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!

Python的list乘法【巨坑】_第1张图片

*操作符在实现上是复制了值的引用,而不是创建了新的对象。所以list的三个item指向的是同一个地址!

*操作符对于不可变对象是安全的,对于可变对象要小心。

而python里list是可变对象,tuple是不可变对象。

将上述初始化声明换成以下就ok了



你可能感兴趣的:(Python的list乘法【巨坑】)