字典要拷貝時會發生的問題,跟 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)