私はちょうどプログラミングを始めました。そして、「コンピュータ科学者のように考える方法」を通して、Pythonのために働いています。クローニングとディープコピーの違いは?
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のパスを作成する必要があります。私は、第9章でエクササイズに来たまで、私は何の問題もありませんでした。私は最後のテストに立ち往生していました。
x = len(matrix)
matrix2 = [d[:] for d in matrix]
for z in range(x):
matrix2[z] += [0]
return matrix2
私の質問はこれです:なぜ二行目は、することはできません。この行が所定の位置にある
matrix2 = matrix[:]
元のリストを編集します私は以下の通りであるソリューションを、見上げ加算要素を含める。 「How to be ..」ガイドは、元のリストに影響を与えずに編集可能な新しいリストをクローン作成のように発音させます。それが本当なら、ここで何が起こっているの?私が使用している場合:
matrix2 = copy.deepcopy(matrix)
すべてが正常に動作しますが、私は、クローニングは失敗するだろうという印象の下ではなかった... 任意の助けをいただければ幸いです!
感謝。行列の離散コピーを作成したいが、入れ子リストを同じオブジェクトを参照するようにしたいという理由は何か?私はそれが混乱以外の何かになることを予見するプロセスには十分ではありません。 – Alxmrg
これは、設計の決定が少なく、Pythonの仕組みの影響もあります。 Pythonで割り当てるときはいつでも、あなたはオブジェクトをコピーしません、あなたは単にそれへの参照として変数を割り当てます。他の方法で任意に行うことは意味がありません。 –