有一个重要的事情我们必须要弄清楚,即我们是在与一个共享的数组视图打交道,还是获得了数组数据的一个副本。例如,一个切片(slice)对应一个视图。这意味着,如果你把一个切片赋值给一个变量,随后改变了切片所在数组中的内容,那么这个变量的值也会改变。我们将用著名的图像Lena创建一个数组,复制该数组,创建一个视图,最后再修改这个视图。
准备工作
必须具备的条件和上一章相同。
具体步骤
创建数组Lena
的一个副本和视图。
1. 创建数组Lena
的一个副本:
- 创建数组
Lena
的一个视图
- 利用flat迭代器,把视图中所有的值清零:
最终结果是,只有一幅图像显示的是Lena的肖像,其他几幅图像都被完全删剪掉了。
本攻略展示了数组的视图和副本的不同之处,完整代码如下。
小结
如你所见,在程序的后半段,通过改变视图的内容,我们改变了原始数组Lena
中的内容。这导致有三幅图像会显示为单一的蓝色(如果你只能看到黑白图像,将显示为黑色),只有原始数组的副本不受视图内容改变的影响。一定要牢记,视图不是只读的。