2016-11-17 3 views
0

아니요, 이것은 중복되지 않습니다. -board - 플레이어Python shallow/deep 복사 오류

플레이어가 인스턴스화 될 때, 그 플레이어를위한 새로운 보드 객체를 만듭니다

나는 다음과 같은 클래스가 있습니다.

나는 현재 및 잠재 플레이어로 전환하는 기능이 있습니다

from copy import deepcopy 


switch_players(self): 
    temp_val = deepcopy(self.current_player) 
    # self.current_player = None 
    self.current_player = deepcopy(self.latent_player) 
    # self.latent_player = None 
    self.latent_player = deepcopy(temp_val) 
    temp_val = None 

내가 self.current_player.name를 호출 할 때이 선수의 이름에 대한 잘 작동을하지만 self.current_player.board.display를 사용하거나, 그것에 를 쓸 때 그것은 참조 두 선수 모두 같은 기판이 있습니다.

나는이 같은 전환 할 보드의 deepcopy()을 만드는 코드를 추가했지만 여전히 동일한 문제가 발생합니다. 이런 일을 근본적으로 잘못된 방법일까요? 아니면이 접근법이 맞습니까? 그리고 다른 곳에서 코드를 찾아야합니까? (나는이 일을하는 또 다른 방법이 있지만 왜이 현재의 접근 방식이 작동하지 않는지에 대한 이론을 이해하지 못한다.)

답변

1

이름은 문자열이기 때문에 보드는 복사 될 클래스 인스턴스이므로, 그러나 한 단계 더 깊기 때문에 deepcopy로 복사되지 않습니다. Deepcopy는 재귀 적으로 의미하지 않습니다.

+0

자신 만의 복사 기능을 만들어야합니다. – quantummind

+0

그냥 그 스레드를 발견 - 덕분에 도움을! –