我写这段代码是为了对给定的图像进行均值过滤。在它中,我首先初始化一个二维数组。但是,当我尝试将一个值赋给特定的单元格时,它实际上将该值赋给了整个列。如下所示:
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]]有人能确切地解释这种行为背后的原因吗?
发布于 2017-02-24 18:08:25
数组的“乘法”是将一个引用复制到要乘法的对象,即生成的数组的每个元素都指向相同的实际实例。因此,修改一个元素会修改所有元素。
https://stackoverflow.com/questions/42435778
复制相似问题