私はプログラミングを始めたばかりで、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
私の質問はこれです:なぜ2行目ができないのですか:
matrix2 = matrix[:]
この行が配置されると、元のリストが編集され、追加要素が含まれるようになります。「How to be..」ガイドは、複製によって元のリストに影響を与えずに編集できる新しいリストを作成するように聞こえます。それが本当なら、ここで何が起こっているのですか?私が使用する場合:
matrix2 = copy.deepcopy(matrix)
すべてが正常に機能しますが、クローン作成が失敗するという印象はありませんでした...どんな助けも大歓迎です!