2016-06-10 3 views
1

이것은 코드입니다. 표준 Binary Tree 클래스입니다.임시 변수를 사용하지 않고 클래스의 변수 교환

다른 절에서
class BinaryTree: 
    def __init__(self,rootObj): 
     self.key = rootObj 
     self.leftChild = None 
     self.rightChild = None 

    def insertLeft(self,newNode): 
     if self.leftChild == None: 
      self.leftChild = BinaryTree(newNode) 
     else: 
      t = BinaryTree(newNode) 
      t.leftChild = self.leftChild 
      self.leftChild = t 

가, 나는 t 변수를 제거하고 단순히이 할 수있는 :

BinaryTree(newNode).leftChild, self.leftChild = self.leftChild, BinaryTree(newNode) 

겠습니까이 일을? BinaryTree 클래스를 두 번 호출하는 것처럼 보입니다. 두 개의 다른 인스턴스를 만들겠습니까?

+1

당신이 (__init__''에 선택적 인수, 당신이 할 수있는'self.leftChild = BinaryTree (newNode, leftChild = self.leftChild)'로 왼쪽/오른쪽 아이를 취할 수 또한 if self.leftChild == None'을 명시 적으로 검사하는 번거 로움을 덜어 줄 것입니다 –

+1

질문에 대답하려면 예. 두 개의 다른 인스턴스가 생성됩니다. –

+0

새로 생성 된 개체에 대한 참조가 없습니다. 전화를 걸면 쓰레기 수거됩니다. –

답변

1

새로 작성한 BinaryTree 인스턴스와 이전 self.leftChild 값을 기록한 것과 동시에 추적 할 수 있어야합니다. 동시 할당을 사용하면이 시나리오에서는 작동하지 않습니다.

그러나 당신은 leftChild 다음 생성자에서 지정하는 새로운 BinaryTree 인스턴스가 바로 self.leftChild로 생성 될 수있다 (허용 된 경우) :

class BinaryTree: 
    def __init__(self,rootObj, leftnode=None, rightnode=None): 
     self.key = rootObj 
     self.leftChild = leftnode 
     self.rightChild = rightnode 

    def insertLeft(self,newNode): 
     #if self.leftChild == None: pass leftnode=None to constructor. 
     # which is the same as passing leftnode=self.leftChild 
     self.leftChild = BinaryTree(newNode, leftnode = self.leftChild) 

새로 만든 노드는 초기화시 설정 자체 leftChild 속성이이 방법 따라서 insertLeft에서 수동으로 수행 할 필요가 없습니다.

0

BinaryTree에서 Object를 사용하기 때문에 임시 변수를 만들어야합니다. 경우 정수가 될 수있다 :

a = 5 
b = 3 
a += b # a = 8 
b = a - b # b = 5 
a -= b # a = 3 
print(a) 
>>3 
print(b) 
>>5 
관련 문제