문제는 실제로 클래스의 인스턴스가 아니라 클래스 정의를 복사한다는 것입니다.
코드의 또 다른 문제는 속성이다 age
하고이 score
클래스의 일부이며 그 클래스의 모든 인스턴스간에 공유됩니다. 이것은 아마도 당신이 의도 한 것이 아닐 것입니다.
아마도 당신이하고 싶은 것은 :
import copy
class Player:
def __init__(self, age, score):
self.age = age
self.score = score
player1 = Player(23, 1)
player2 = Player(14, 2)
player3 = copy.deepcopy(player1)
player1.age += 1
print "player1.age", player1.age
print "player3.age", player3.age
이것은 당신이 기대하는 것을 제공합니다.
player1.age 24
player3.age 23
-------------------로부터 문서 (강조 광산) :
이 버전은 모듈, 클래스 , 함수, 메소드, 스택 추적, 스택 프레임, 파일, 소켓, 창, 배열 또는 유사한 유형과 같은 유형을 복사하지 않습니다 .
클래스를 복사하려고합니다.
>>> player3 = copy.deepcopy(player1)
>>> player1 is player3
True
그러나
>>> p1 = player1()
>>> p2 = player2()
>>> p3 = copy.deepcopy(p1)
>>> p1 is p3
False
-------------------이것은 설계된대로 작동합니다.
샘플 코드에서 개체 인스턴스가 아닌 클래스 정의를 복사합니다. 에서 copy
모듈 매뉴얼 페이지 :
It does “copy” functions and classes (shallow and deeply), by returning the original object
unchanged
그 후:
player3 = copy.deepcopy(player1)
와 같다:
player3 = player1
그러나 클래스의 인스턴스를 복사하면 예상되는 결과를 얻을 수 있습니다.
player3 = copy.deepcopy(player1())
출처
https://stackoverflow.com/questions/22079916