3

Pythonのdelステートメントをリストに適用すると、非常に奇妙なことが起こります。問題のリストのエントリを削除するだけでなく、変数が派生したリストの同じ要素を削除するための「バックトラック」も削除します。

例えば:

>>> x
[1, 2, 3, 4, 5]
>>> z=x
>>> del z[1]
>>> z
[1, 3, 4, 5]
>>> x
[1, 3, 4, 5]

つまり、削除をに適用zしても、削除はに適用されxます。この「バックトラッキング」は、他のコマンドや機能を思い付くことはありません。

>>> x=[1,2,3,4,5]
>>> z=x
>>> z+[6]
[1, 2, 3, 4, 5, 6]
>>> x
[1, 2, 3, 4, 5]

add関数をzに適用すると、xは影響を受けません。

これは、私が取り組んでいる削除「NA」スクリプトであらゆる種類の頭痛の種を引き起こしています。delステートメントで何が起こっているのか知っていますか?また、この問題を回避して、 z=xdelを設定してから適用しても変更されないようにするzにはどうすればよいxですか?

4

1 に答える 1

9

z = xリストのコピーは作成しません。zとxは同じリストを指すようになりました。そのリストの変更は、zとxの両方の名前で表示されます。

を使用z + [6]して、結果をに戻しませんでしたz。その後、印刷zしてみてください。のように変更されませんx

z += [6]結果をに割り当てる必要がありz、最初の例と同じ動作になります。

次のいずれかの方法を使用してリストをコピーできます。

z = x[:]
z = list(x)
于 2012-11-11T02:59:21.703 に答える