我刚刚开始编程,并且正在研究 Python 的“如何像计算机科学家一样思考”。在第 9 章进行练习之前,我没有遇到任何问题:
def add_column(matrix):
"""
>>> m = [[0, 0], [0, 0]]
>>> add_column(m)
[[0, 0, 0], [0, 0, 0]]
>>> n = [[3, 2], [5, 1], [4, 7]]
>>> add_column(n)
[[3, 2, 0], [5, 1, 0], [4, 7, 0]]
>>> n
[[3, 2], [5, 1], [4, 7]]
"""
代码应该使上述 doctest 通过。我被困在最后一个测试中:让原始列表不受影响。我查找了解决方案,如下所示:
x = len(matrix)
matrix2 = [d[:] for d in matrix]
for z in range(x):
matrix2[z] += [0]
return matrix2
我的问题是:为什么第二行不能是:
matrix2 = matrix[:]
当此行到位时,原始列表将被编辑以包含添加元素。“如何成为..”指南听起来像是克隆创建了一个可以在不影响原始列表的情况下进行编辑的新列表。如果这是真的,这里发生了什么?如果我使用:
matrix2 = copy.deepcopy(matrix)
一切正常,但我并不认为克隆会失败......任何帮助将不胜感激!