我在使用 python 对象时遇到了麻烦。它是同一个对象,但现在不同了

时间:2021-05-16 14:59:18

标签: python object instance immutability

enter image description here

您可以看到,我创建了 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

最后,我为所有集群获得了相同的“距离”字典对象。我做错了什么吗? :'(

1 个答案:

答案 0 :(得分:0)

字典不是常规数据类型,使用它们时必须非常小心。

a = [5]
b = a
b.append(3)

您会认为使用此代码 a=[5]b=[5,3],但实际上它们都等于 [5, 3]

顺便说一下,当您分配值 a.d["A"] = 1 时,您将 ARRAY 变成了 DICTIONARY,字典没有上述问题,因此它不会再次出现。

解决方案是从一开始就使用字典,因为它无论如何都适合您的数据类型。