2

Pythonの動作方法によりx = []; y = x; x.append(1); y[1]. ただし、逆に言えば、

z = [1,2]
temp = z
temp[1] = 3
z,temp

印刷されます([1,3],[1,3])。私が正しく理解していれば、両方とも同じリストztemp指しているので、リストが変更可能であるため、一方を変更すると他方が変更されます。どうすればこれを防ぐことができますか? zつまり、にコピーしtemp、さまざまな方法で変更し、キューにプッシュする for ループを作成したいと考えています。それが機能するには、z常に基本配列が含まれている必要があるため、変更が変更さtempれないことが必要ですz

編集: z をタプルに変更して、の代わりにz=z,呼び出してみました。それでも、これは私の問題を解決しません。z[0]z

4

2 に答える 2

10

リストのコピーは簡単です...スライスするだけです:

temp = z[:]

これにより、浅いコピーが作成されます。リスト内の要素への変更は、 の要素に表示されますが、直接 z変更されることはありません。temp


より一般的な目的のために、python にはcopy使用できるモジュールがあります。

temp = copy.copy(z)

または、おそらく:

temp = copy.deepcopy(z)
于 2013-10-10T15:43:27.743 に答える
5

tempコピーを作成してみませんかz:

>>> z = [1, 2]
>>> temp = z[:]
>>> temp[1] = 3
>>> z
[1, 2]
>>> temp
[1, 3]
>>>

[:]リストの浅いコピーを簡単に作成します。

ただし、両方とも Python のモジュールに由来するcopy.copyとにも興味があるかもしれません。copy.deepcopycopy

于 2013-10-10T15:43:41.270 に答える