Python矩阵迭代疑问:为何迭代过程中原矩阵被修改?
为什么你的Python代码会修改原矩阵?
嘿,我来给你掰扯清楚这个问题~
首先得明白Python里可变对象的引用机制,这是核心原因:
- 你定义的
matrix是一个包含多个子列表的列表,而列表属于「可变对象」——也就是说,它们的内容可以被直接修改,而且变量名其实是指向这个对象的「引用」,不是存着对象本身。 - 当你写
for x in matrix的时候,x并不是每个子列表的副本,而是直接指向原矩阵里对应的那个子列表。相当于x和matrix[0]、matrix[1]这些指向的是同一个列表对象。
再加上sort()方法的特性:
list.sort()是原地排序方法,它会直接修改调用它的列表本身,不会返回一个新的排序后的列表(它的返回值是None)。
所以当你在循环里执行x.sort()时,本质上就是在修改原矩阵里的每个子列表,原矩阵自然就跟着变了。
如果不想修改原矩阵,该怎么做?
你可以用sorted()函数代替sort()方法:
matrix = [[1,2,3],[3,1,2],[2,3,1]] new_matrix = [sorted(x) for x in matrix] print(matrix) # 原矩阵不变:[[1,2,3],[3,1,2],[2,3,1]] print(new_matrix) # 新的排序后的矩阵:[[1, 2, 3], [1, 2, 3], [1, 2, 3]]
因为sorted()会返回一个新的排序后的列表,不会修改原列表,这样就能保留原矩阵的内容啦。
内容的提问来源于stack exchange,提问作者user19516264
相关产品推荐
相关产品推荐

