字典要拷貝時會發生的問題,跟 list 非常相似。如果只是單純使用等號來拷貝的話,那麼任何的 key-value 組合,都會跟著被修改:

d = {123: 456}
e = d

d[123] = 789 # 修改原字典中已存在的一組 key-val
d['abd'] = 'def' # 在原字典中新增一組 key-val
print(d)
print(e)

字典本身有一個「copy」方法,可以幫你複製一個字典。單純使用 copy 的時候,在 value 是數字或字串等狀況下,不會有連帶修改的問題;但是在 value 是串列的時候,串列仍然會被連帶修改:

d = {123: 456}
e = d.copy()

d[123] = 789
d['abd'] = 'def'
print(d)
print(e)

f = {123: [456, 567]}
g = f.copy()

f[123].append(789)
f['abd'] = 'def'
print(f)
print(g)

如果要連串列都能複製一份,則跟串列一樣,需要使用 deepcopy:

import copy

f = {123: [456]}
g = copy.deepcopy(f)

f[123].append(789)
f['abd'] = 'def'
print(f)
print(g)