python 辞書(連想配列)の値をコピーする

python 辞書(連想配列)の値をコピーする

pythonで、辞書(連想配列)の値をコピーするサンプルコードを記述してます。コピーの仕方は、参照渡し(浅いコピー)と値渡し(深いコピー)があります。

環境

  • OS windows10 pro 64bit
  • python 3.7.6

コピー

参照渡し(浅いコピー)でコピーした場合は、コピー元の値を変わってしまいます。

d1 = {'x': 10, 'y': 20}

d2 = d1

# d1の値を編集する
d1['x'] = '100'

print(d1)
# {'x': '100', 'y': 20}

print(d2)
# {'x': '100', 'y': 20}

値渡し(深いコピー)にしたい場合は、「copy」をimportして使用します。

import copy

d1 = {'x': 10, 'y': 20}

d2 = copy.copy(d1)

# d1の値を編集する
d1['x'] = '100'

print(d1)
# {'x': '100', 'y': 20}

print(d2)
# {'x': 10, 'y': 20}

多次元でも、コピーされます。

import copy

d1 = {'x': {'z': 100}, 'y': 20}

d2 = copy.copy(d1)

print(d1)
# {'x': {'z': 100}, 'y': 20}

print(d2)
# {'x': {'z': 100}, 'y': 20}

また、dict.fromkeysを使用して、キーだけをコピーすることも可能です。

d1 = {'x': 10, 'y': 20}

d2 = dict.fromkeys(d1)

print(d1)
# {'x': '10', 'y': 20}

print(d2)
# {'x': None, 'y': None}

値を指定することも可能です。

d1 = {'x': 10, 'y': 20}

d2 = dict.fromkeys(d1,100)

print(d1)
# {'x': '10', 'y': 20}

print(d2)
# {'x': 100, 'y': 100}