采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
波波老师您好,在第4.2节矩阵的实现里, 您使用了这样的操作: self._values = [row[:] for row in list2d] 请问为何不能直接使用list2d来进行运算呢?这一步的复制的作用是什么?
因为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,也进行一下复制,原因是一样的:)
加油!:)
登录后可查看更多问答,登录/注册
创新设计,通俗易懂。编程结合数学,bobo带你彻底征服线性代数
1.5k 16
1.3k 13
1.7k 12
2.0k 11
1.7k 10
购课补贴联系客服咨询优惠详情
慕课网APP您的移动学习伙伴
扫描二维码关注慕课网微信公众号