카테고리 없음

[파이썬] Python copy.deepcopy () 함수가 제대로 작동하지 않음 [중복]

행복을전해요 2021. 2. 20. 03:51

문제는 실제로 클래스의 인스턴스가 아니라 클래스 정의를 복사한다는 것입니다.

코드의 또 다른 문제는 속성이다 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