我编写了这段代码,对给定的图像进行均值过滤。 在其中,我首先初始化一个二维数组。但是当我尝试为特定单元格分配值时,它实际上将值分配给整个列。见下文:
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]]
任何人都可以准确解释这种行为背后的原因吗?
答案 0 :(得分:0)
数组'multiplication'是复制对你正在乘的东西的引用,即生成的数组的每个元素指向同一个实际实例。因此,修改一个会修改所有元素。