python多维数组乘法行为

时间:2017-02-24 10:05:12

标签: python list

我编写了这段代码,对给定的图像进行均值过滤。 在其中,我首先初始化一个二维数组。但是当我尝试为特定单元格分配值时,它实际上将值分配给整个列。见下文:

def boxBlur(image):    
    height = len(image)
    width = len(image[0])
    result = [[0]*(width-2)]*(height-2)
    for i in range(height-2):
        for j in range(width-2):                         
            mysum = image[i][j] + image[i][j+1] + image[i][j+2] + image[i+1][j] + image[i+1][j+1] + image[i+1][j+2] + image[i+2][j] + image[i+2][j+1] + image[i+2][j+2]            
            result[i][j] = mysum / 9
            print result        

boxBlur([[7,4,0,1], 
 [5,6,2,2], 
 [6,10,7,8], 
 [1,4,2,0]])

输出如下:

[[5, 0], [5, 0]]
[[5, 4], [5, 4]]
[[4, 4], [4, 4]]
[[4, 4], [4, 4]]

任何人都可以准确解释这种行为背后的原因吗?

1 个答案:

答案 0 :(得分:0)

数组'multiplication'是复制对你正在乘的东西的引用,即生成的数组的每个元素指向同一个实际实例。因此,修改一个会修改所有元素。