6

リストの辞書をコピーするにはどうすればよいですか? また、その複雑さは何ですか? 私がコピーしようとしている辞書は次のようなものです:

myDict = { 'k1': ['a', 'b', 'c'], 
           'k2': ['d', 'e', 'f'], 
           'k3': ['g', 'h', 'i'] }
4

3 に答える 3

11
from copy import deepcopy
myCopy = deepcopy(myDict)

deepcopy常に方法です

于 2013-01-07T21:35:30.190 に答える
7

複雑なデータ構造をコピーする最も簡単な方法は、copy.deepcopy. (自分でやろうと考えている場合は、ソースを参照して、何が関係しているかを把握してください。)

複雑さは明らかに O(NM) である必要があります。ここで、N はエントリの数dict、M はエントリの平均数ですlist。しかし、それをやり遂げましょう:

dictN 個のキーと値のペアがあり、各値がlist平均 M 個の要素を持つとします。

s が単純な値の場合、list1 つのハッシュ テーブルを割り当て、2N+1 個の単純なコピーと、場合によっては N 個のハッシュを実行する必要があります。s は不変であり、stringとにかく長さが 1 であり、そうでない場合、Python はハッシュ値を大きな文字列にキャッシュします。したがって、合計 O(N) 回の操作があります。

しかし、lists は単純な値ではありません。M新しいリストを割り当てて要素をコピーする必要があります。これには O(M) 時間がかかります。N 個あるので O(NM) です。

したがって、合計時間は O(N + NM) = O(NM) です。

そして、NM オブジェクトがあり、それらすべてを明示的にコピーしたい場合、これに勝るものはありません。

もちろん、不要な部分を取り除き、deepcopy残ったタイトなループを Cython や C に移植することで、桁違いの改善が得られると考えられます。

于 2013-01-07T21:45:21.667 に答える
-1

copy()辞書をコピーするために呼び出される内部辞書メソッドを使用できます。

例:

a = {'s':[1,2,3], 'f':[5,4,2]}
b = a.copy()

変えaてもb変わらない。

辞書はハッシュテーブルを使用してデータを格納するため、複雑さは に近くO(1)、そのデータへのアクセスは に近くO(1)、リストの場合、データへのアクセスとメモリプロセスは一定時間であるため、 に近いO(1).

于 2013-01-07T21:51:05.400 に答える