Python 最近点等于树上的所有不同位置,为什么?

Python 最近点等于树上的所有不同位置,为什么?,python,Python,在返回特定点的最近点后,下次当我将最近点返回到另一点时,将返回与之前相同的最近点。为什么呢 class kdnode: def __init__(self,point,left,right): self.point = point self.left = left self.right = right class kdTree: def __init__(self,points,threshold): self.t

在返回特定点的最近点后,下次当我将最近点返回到另一点时,将返回与之前相同的最近点。为什么呢

class kdnode:
    def __init__(self,point,left,right):
        self.point = point
        self.left = left
        self.right = right

class kdTree:
    def __init__(self,points,threshold):
        self.threshold = threshold
        self.root = self.make_kdtree(points)
        self.froot = None
        self.isFirst = True

    def make_kdtree(self,points,depth = 0):
        if(len(points) <= self.threshold):
            return kdnode(points,None,None)
        dimension = 2
        axis = depth % dimension
        sp = sorted(points,key = lambda point:point[axis])
        mid = len(points)//2
        return kdnode(sp[mid],self.make_kdtree(sp[:mid],depth+1),self.make_kdtree(sp[mid+1:],depth+1))

    def find_closest(self,point,depth=0):
        if self.isFirst:
            self.froot = self.root.point
            self.isFirst = False
        if(self.root.left) is None and self.root.right is None:
            return self.root.point
        axis = depth%2
        if point[axis] > self.root.point[axis]:
            self.root = self.root.right
        else:
            self.root = self.root.left
        return self.find_closest(point,depth+1)
类节点:
定义初始(自身、点、左、右):
self.point=点
self.left=左
self.right=right
类kdTree:
定义初始值(自身、点、阈值):
self.threshold=阈值
self.root=self.makekdu树(点)
self.froot=无
self.isFirst=True
def make_kdtree(自身、点、深度=0):
if(len(points)self.root.point[轴]:
self.root=self.root.right
其他:
self.root=self.root.left
返回自我。找到最近的(点,深度+1)
这就是为什么:

def find_closest(self,point,depth=0):
    if self.isFirst:
        self.froot = self.root.point
        self.isFirst = False
调用
find\u-nestest()
时,它会自动更改。这绝对不是您想要的。
find\u-nestest()
应该是一个只读操作,不会破坏数据结构。

这就是为什么:

def find_closest(self,point,depth=0):
    if self.isFirst:
        self.froot = self.root.point
        self.isFirst = False

当调用
find\u nestest()
时,它会改变自身。这绝对不是您想要的。
find\u nestest()
应该是不会破坏数据结构的只读操作。

self
是当前对象。
self.isFirst=False
更改当前对象。下次调用
find\u closest()
,因为您更改了它。
self
是当前对象。
self.isFirst=False
更改了当前对象。下次调用
find\u closest()
时它将不一样,因为您更改了它。