请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

self._values = [row[:] for row in list2d]

波波老师您好,在第4.2节矩阵的实现里,
您使用了这样的操作:
self._values = [row[:] for row in list2d]
请问为何不能直接使用list2d来进行运算呢?这一步的复制的作用是什么?

正在回答 回答被采纳积分+3

1回答

liuyubobobo 2018-09-23 01:53:03

因为list2d是一个外面的用户传来的引用。如果直接使用list2d,而不进行复制的话,外面的用户如果修改这个list2d,将直接改变我们的矩阵中的数据:)


比如,你可以尝试一下做下面的操作。

首先,将这句话变成:self._values = list2d

然后在测试函数中:

A = [[1, 2], [3, 4]] # 声明一个二维列表
M = Matrix(A)        # 用这个二维列表实例化一个矩阵类
print(M)             # 可以打印M看一看:)

A[0][0] = 666 # 可能由于某种原因,对于二维列表中的值进行了修改
              # 但注意,此时我们没有对M做修改
print(M)      # 你会发现,M也变了:)这不是我们想要的结果

 

可以再换回 self._values = [row[:] for row in list2d],使用上面的测试用例试试看?:)此时,M就是安全的了。


这和我们在实现Vector的时候,对于Vector中存储的_values,也进行一下复制,原因是一样的:)


加油!:)

4 回复 有任何疑惑可以回复我~
问题已解决,确定采纳
还有疑问,暂不采纳
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号