您可以看到,我创建了 A 类的两个实例。因此,a.d(第一个实例的 dict)和 b.d(第二个实例的 dict)必须不同!但它们不是,我们可以清楚地看到 a.d == b.d = True。好的,所以,这应该意味着如果我要修改 a.d,那么 b.d 也会被修改,对吧?不。现在它们不同了。你会说,好吧,他们只是按价值比较,而不是按链接价值比较。但我还有另一个代码问题:
class cluster(object):
def __init__(self, id, points):
self.id = id
self.points = points
self.distances = dict() # maps ["other_cluster"] = distance_to_other_cluster
def set_distance_to_cluster(self, other_cluster, distance):
"""Sets distance to itself and to other cluster"""
assert self.distances != other_cluster.distances
self.distances[other_cluster] = distance
other_cluster.distances[self] = distance
最后,我为所有集群获得了相同的“距离”字典对象。我做错了什么吗? :'(
答案 0 :(得分:0)
字典不是常规数据类型,使用它们时必须非常小心。
a = [5]
b = a
b.append(3)
您会认为使用此代码 a=[5]
和 b=[5,3]
,但实际上它们都等于 [5, 3]
。
顺便说一下,当您分配值 a.d["A"] = 1
时,您将 ARRAY
变成了 DICTIONARY
,字典没有上述问题,因此它不会再次出现。
解决方案是从一开始就使用字典,因为它无论如何都适合您的数据类型。