3

私は周りを検索してたくさんのことを試しましたが、これを機能させることができません。問題は、Pythonのリスト名が実際のリストではなく、リストを指す方法に関係していると思いますが、それでも理解できません。状況はこれです(それは辞書のリストです):

list_original = [dictionary1, dictionary2, dictionary3]
dictionary2_modified = dictionarymodifier(dictionary2) #some function that modifies the chosen element
list_modified = [i for i in list_original] #makes copy of original list
for i,n in enumerate(dictionary_original):
    if i==1:
        list_modified[1] = dictionary2_modified #replaces element with modified version
return list_original, list_modified

そして多くの類似したものが、私は常に元のリストの2つまたは新しいリストの2つを取得します!私はPython2.4を使用しているので、選択の余地がないことを付け加えます。

助けてくれてありがとう

4

3 に答える 3

6

可変対不変

可変要素と不変要素の違いを知る必要があります。つまり、Pythonの辞書とリストはどちらも変更可能です。つまり、ある場所で変更すると、別の場所でも変更されます。

さらに、可変タイプの変数(listまたはdict)には不変要素(例)を含めることができstr、その逆も可能です。不変タイプの変数(例tuple)には可変要素(listまたはdict)を含めることができます。

可変性の例

したがって、これはリストの例を使用して可変性を示しています。

>>> a = [1, 2, 3, 4]
>>> b = a
>>> a
[1, 2, 3, 4]
>>> b
[1, 2, 3, 4]
>>> a[2] = 'x'
>>> a
[1, 2, 'x', 4]
>>> b
[1, 2, 'x', 4]

リストまたは口述のコピーを入手する方法

のコピーを取得するにはlist、代わりにこれを行うことができます。

new_list = old_list[:]  # the slicing at the end just takes the whole list

これの場合、dict一般的に十分です:

new_dict = old_dict.copy()

ネストされたリスト/ディクテーション

ただし、フラットまたは可変要素のみを含むリスト/ディクテーションは、私が示した方法でコピーできますが、より複雑な可変データ構造のコピーを取得するには、さらに何かを行う必要があります...

そのような場合、その機能copyを備えたモジュールが非常に役立つ場合があります。モジュールのドキュメントには、その目的について詳しく説明されています。deepcopycopy

Pythonの代入ステートメントはオブジェクトをコピーせず、ターゲットとオブジェクトの間にバインディングを作成します。可変または可変アイテムを含むコレクションの場合、一方が他方を変更せずに一方のコピーを変更できるように、コピーが必要になることがあります。このモジュールは、一般的な浅いコピー操作と深いコピー操作を提供します(以下で説明します)。

于 2013-01-29T20:38:07.900 に答える
0

あなたdictionarymodifierは実際にその場で変異dictionary2していますか?もしそうなら、あなたがあなたのリストを構築する方法は無関係です。

を使用するだけで、リストの浅いlist_modified = list(list_original)コピーを作成でき ます。これを心ゆくまで変更できますが、元のリストのアイテム変更しない場合に限ります(不変のビルドである場合は変更できません-数字や文字列などでは、初心者はこれを深いコピーと間違えることがよくあります)。

本当にリストをコピーする必要がある場合は、それを使用できますcopy.deepcopy

于 2013-01-29T20:39:09.147 に答える
0

リストのコピーを作成する必要があります。

copy=list(original)
original[0] = None
于 2013-01-29T20:39:19.823 に答える