在调试我的作业时,我意识到我需要使用deepcopy
复制字典。为什么包含实例的字典的深层副本的结果与另一个包含列表的字典的深层副本不同?
我预计deepcopy
给我类似的结果(用列表的字典打交道时,这是真的):
import copy
dict3 = {1 : [1,2,3], 2 : [1,2]}
dict4 = copy.deepcopy(dict3)
print dict3 # {1: [1, 2, 3], 2: [1, 2]}
print dict4 # {1: [1, 2, 3], 2: [1, 2]}
print dict3 == dict4 # True
然而,我发现这样的:
import copy
class Fruit(object):
def __init__(self, name, color):
self.name = name
self.color = color
def __repr__(self):
return self.color
# Building dict1
dict1 = {}
dict1['apple'] = Fruit('apple', 'red')
dict1['banana'] = Fruit('banana', 'yellow')
# Deep copy dict1 and assign it to dict2
dict2 = copy.deepcopy(dict1)
print dict1 # {'apple': red, 'banana': yellow}
print dict2 # {'apple': red, 'banana': yellow}
print dict1 == dict2 # False
如果我想要一个在最后的print
声明中给我一个True
的副本,我该怎么办?
您还没有实现在''__eq__' ... Fruit' – jonrsharpe
@jonrsharpe我不知道,哈哈。非常感谢! –